//#include
#include
#include
#include
struct msg_buf
{
int mtype;
char data[255];
};
int main(void)
{
key_t key;
int msgid;
int ret;
struct msg_buf msgbuf;
key=ftok("/tmp/1",'a');
printf("key=[%x]\n",key);
msgid=msgget(key,IPC_CREAT|IPC_EXCL|0666);
if(msgid==-1)
{
printf("create error\n");
return -1;
}
msgbuf.mtype=getpid();
strcpy(msgbuf.data,"test haha");
ret=msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),IPC_NOWAIT);
if(ret==-1)
{
printf("send message error\n");
return -1;
}
memset(&msgbuf,0,sizeof(msgbuf));
ret=msgrcv(msgid,&msgbuf,sizeof(msgbuf.data),getpid(),IPC_NOWAIT);
if(ret==-1)
{
printf("recv message error\n");
return -1;
}
printf("receive msg =[%s]\n",msgbuf.data);
return 0;
}
以上是国嵌视频的例子。
执行该部分code,编译会报错误,执行的时候不能成功。原因是头文件string.h没有添加。
虽然错误很简单,但有时候就是一个不经意的错误,导致调试的很大不便!
lixupeng 于 2011-09-18 21:10:00发表:
mark!
寺枫叶0808 于 2011-09-17 20:22:07发表:
哥,上面的
memset(&msgbuf,0,sizeof(msgbuf));
这一步是为什么
如果说把指定区域清零了,那原来发送的数据不就没了吗?
为什么还能读取呢?
txgc_wm 于 2011-02-28 00:59:04发表:
信号量又称信号灯,主要用于进程之间的控制,保护临界资源。