检查消息是否在POSIX消息队列中,而不是从队列中删除它?

时间:2010-06-22 20:21:41

标签: posix message-queue

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

3 个答案:

答案 0 :(得分:0)

从Linux mq_overview(7)手册页:

轮询消息队列描述符


       在Linux上,消息队列描述符实际上是一个文件描述符,可以使用它进行监视        选择(2),民意调查(2)或 epoll (7)。这不便携。

答案 1 :(得分:0)

请参阅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 */
       };

答案 2 :(得分:0)

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

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

最后,看看它的mq_curmsgs成员