【问题标题】:Reading from message queue (non-blocking if empty)从消息队列中读取(如果为空则非阻塞)
【发布时间】: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


    【解决方案1】:

    使用IPC_NOWAIT。来自documentation

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        ipcs
        

        linux 终端中的命令。

        它会显示你创建的队列。

        【讨论】:

        • 感谢您的反馈,但请注意,OP 询问的是 C 编程,因此可能无法选择使用外部实用程序。
        猜你喜欢
        • 2014-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多