红联Linux门户
Linux帮助

消息队列的练习

发布时间:2011-02-28 00:56:56来源:红联作者:txgc_wm
#include
//#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没有添加。

虽然错误很简单,但有时候就是一个不经意的错误,导致调试的很大不便!
文章评论

共有 3 条评论

  1. lixupeng 于 2011-09-18 21:10:00发表:

    mark!

  2. 寺枫叶0808 于 2011-09-17 20:22:07发表:

    哥,上面的
    memset(&msgbuf,0,sizeof(msgbuf));
    这一步是为什么
    如果说把指定区域清零了,那原来发送的数据不就没了吗?
    为什么还能读取呢?

  3. txgc_wm 于 2011-02-28 00:59:04发表:

    信号量又称信号灯,主要用于进程之间的控制,保护临界资源。