成功创建了System V消息队列,命令ipcs -q
输出:
------ Message Queues --------<
key msqid owner perms used-bytes messages
0x080b2fb4 0 hel 600 0 0
但接收消息的程序返回:
退出:msgrcv错误,没有所需类型的消息
这是我的代码:
/* create key for message queue */
key = ftok("/home/hel/messageQueueSystemV", 8);
if (key == -1) {
printf("exit: ftok error, %s\n", strerror(errno)); // error
exit(0);
}
/* open existed message queue */
mqFd = msgget(key, 0600);
if (mqFd < 0) {
printf("exit: msgget error, %s\n", strerror(errno)); // error
exit(0);
}
/* receive a message */
if (msgrcv(mqFd, &buf, 1 + sizeof(short), 0, IPC_NOWAIT) < 0) { // type is 0
printf("exit: msgrcv error, %s\n", strerror(errno)); // error
exit(0);
}
答案 0 :(得分:2)
将评论转移到答案。
我建议:
也许没有消息在等待?您在哪里编写代码以将消息发送到队列?
回应是:
首先,我运行一个程序来创建消息队列并发送消息。然后使用命令
ipcs -q
检查它是否成功。然后我开始另一个进程来接收该消息。
开始吵架:
ipcs
的输出表示没有排队的邮件。你告诉msgrcv()
不要等,所以没有,所以它返回“没有排队的消息”。我不理解的是什么?
而且,看起来,这是正确的诊断。