从消息队列中读取(如果为空则不阻塞)

时间:2012-12-20 14:38:11

标签: c linux message-queue sysv-ipc

我正在写信息队列

if (msgsnd(q, &msg, sizeof(message), slaves_list[to]) == -1)

并阅读

if (msgrcv(q, &msg, sizeof(message), id, 0) == -1)

但是如果这个队列是空的怎么办?怎么检查?如果没有什么我想在循环中执行下一条指令

3 个答案:

答案 0 :(得分:4)

使用IPC_NOWAIT。来自documentation

  

如果(msgflg & IPC_NOWAIT)非零,则调用线程将立即返回,返回值为-1,错误号设置为[ENOMSG]

答案 1 :(得分:3)

对msgflg参数使用IPC_NOWAIT:http://man7.org/linux/man-pages/man2/msgsnd.2.html

IPC_NOWAIT 如果队列中没有所请求类型的消息,则立即返回。系统调用失败,并将errno设置为ENOMSG。

答案 2 :(得分:0)

您可以使用

检查队列是否为空
ipcs
linux终端中的

命令。

它将显示您已创建的队列。