POSIX提供了一种使用mq_receive函数读取消息队列的方法。此函数还将其从队列中删除。我需要找到一种方法来检查消息是否在队列中而不删除它。
答案 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成员