4

我正在写消息队列

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

和阅读

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

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

4

3 回答 3

4

使用IPC_NOWAIT. 从文档中:

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

于 2012-12-20T14:42:53.400 回答
4

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

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

于 2012-12-20T14:43:07.293 回答
0

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

ipcs

linux终端中的命令。

它将显示您创建的队列。

于 2014-08-13T11:31:08.910 回答