【发布时间】:2012-12-08 02:40:19
【问题描述】:
我正在写入消息队列
if (msgsnd(q, &msg, sizeof(message), slaves_list[to]) == -1)
阅读
if (msgrcv(q, &msg, sizeof(message), id, 0) == -1)
但是如果这个队列是空的呢?如何检查?如果没有什么我想在循环中执行下一条指令
【问题讨论】:
标签: 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)
但是如果这个队列是空的呢?如何检查?如果没有什么我想在循环中执行下一条指令
【问题讨论】:
标签: c linux message-queue sysv-ipc
使用IPC_NOWAIT。来自documentation:
如果
(msgflg & IPC_NOWAIT)不为零,则调用线程将立即返回,返回值为-1,并将errno 设置为[ENOMSG]。
【讨论】:
对 msgflg 参数使用 IPC_NOWAIT:http://man7.org/linux/man-pages/man2/msgsnd.2.html
IPC_NOWAIT 如果队列中没有请求类型的消息,则立即返回。系统调用失败,errno 设置为 ENOMSG。
【讨论】:
您可以使用检查队列是否为空
ipcs
linux 终端中的命令。
它会显示你创建的队列。
【讨论】:
C 编程,因此可能无法选择使用外部实用程序。