【问题标题】:Check to see if a message is in a POSIX message queue w/o removing it from the queue?检查一条消息是否在 POSIX 消息队列中而没有从队列中删除它?
【发布时间】:2010-06-22 20:21:40
【问题描述】:

POSIX 提供了一种使用其 mq_receive 函数读取消息队列的方法。此函数还将它从队列中删除。我需要找到一种方法来检查消息是否在队列中而不将其删除。

【问题讨论】:

    标签: posix message-queue


    【解决方案1】:

    来自 Linux mq_overview(7) 手册页:

    轮询消息队列描述符


    在 Linux 上,消息队列描述符实际上是一个文件描述符,可以使用 select(2)、poll(2) 或 epoll(7)。这不是便携式的。

    【讨论】:

    • 谢谢。是的,我已经“伪造”了它,以便在以检查 msg 队列方式使用 mq_recieve 后立即执行具有高优先级消息的 mq_send 来使其工作。
    【解决方案2】:

    mq_getattr(3)。属性之一是mq_curmsgs。除了您将从epoll() 获得的布尔指示之外,实际获得队列深度也很好。

    来自 Linux 手册页:

           struct mq_attr {
               long mq_flags;       /* Flags: 0 or O_NONBLOCK */
               long mq_maxmsg;      /* Max. # of messages on queue */
               long mq_msgsize;     /* Max. message size (bytes) */
               long mq_curmsgs;     /* # of messages currently in queue */
           };
    

    【讨论】:

      【解决方案3】:

      您希望在打开消息队列时添加 mq_attr 数据结构,然后使用 mq_getattr 函数获取属性

      int mq_getattr(mqd_t mqdes, struct mq_attr *attr);

      最后,看看它的 mq_curmsgs 成员

      【讨论】:

        猜你喜欢
        • 2021-12-23
        • 2020-11-27
        • 1970-01-01
        • 2017-07-22
        • 2014-02-13
        • 2019-03-17
        • 2015-04-12
        • 2020-04-18
        • 2020-04-25
        相关资源
        最近更新 更多