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

我正在写消息队列

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

和阅读

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

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

使用IPC_NOWAIT 。 从文档 :

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

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

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

您可以使用。检查队列是否为空

 ipcs 

命令在linux终端。

它会显示你创建的队列。