一个消息队列例子,第一次运行正确,第二次运行就提示消息发送失败了

sin816 2011-11-27 10:44:37
第一次运行还能正确发送消息,第二次运行就无法发出消息,请大家指点下,谢谢。

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
key_t unique_key;
int msgid;
int status;
char str1[] = {"test message:hello!"};
char str2[] = {"test message:goodbye!"};
struct msgbuf
{
long msgtype;
char msgtext[1024];
}sndmsg,rcvmsg;

if(msgid = msgget(IPC_PRIVATE, 0666) == -1)
{
printf("msgget error!\n");
exit(254);
}

sndmsg.msgtype = 111;
sprintf(sndmsg.msgtext, "%s", str1);

if(msgsnd(msgid, (struct msgbuf *)&sndmsg, sizeof(str1)+1, 0) == -1)
{
printf("msgtype 111 send error!\n");
exit(254);
}

if(status = msgrcv(msgid, (struct msgbuf *)&rcvmsg,80,111,IPC_NOWAIT) == -1)
{
printf("msgrcv error!\n");
exit(254);
}

printf("The received message:%s\n",rcvmsg.msgtext);
msgctl(msgid, IPC_RMID, 0);

exit(0);
}
...全文
199 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenzheng101 2011-12-02
  • 打赏
  • 举报
回复
if(msgid = msgget(IPC_PRIVATE, 0666) == -1)
少加了括号,应该是if((msgid = msgget(IPC_PRIVATE, 0666)) == -1)
justkk 2011-11-28
  • 打赏
  • 举报
回复
嗯,典型的C语法错误
if((msgid = msgget(IPC_PRIVATE, 0666)) == -1)
qq120848369 2011-11-28
  • 打赏
  • 举报
回复
sizeof(str1)+1 这不对哦,不需要+1,不过你这里是先拷贝过去的,多发也不是越界而已。
jcback 2011-11-27
  • 打赏
  • 举报
回复
改成if( ( msgid=(msgget(IPC_PRIVATE, 0660))) == -1)

ipcs -qa 就发现异常了,一下子多了那么多队列

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧