【发布时间】:2010-06-22 20:21:40
【问题描述】:
POSIX 提供了一种使用其 mq_receive 函数读取消息队列的方法。此函数还将它从队列中删除。我需要找到一种方法来检查消息是否在队列中而不将其删除。
【问题讨论】:
标签: posix message-queue
POSIX 提供了一种使用其 mq_receive 函数读取消息队列的方法。此函数还将它从队列中删除。我需要找到一种方法来检查消息是否在队列中而不将其删除。
【问题讨论】:
标签: posix message-queue
来自 Linux mq_overview(7) 手册页:
轮询消息队列描述符
在 Linux 上,消息队列描述符实际上是一个文件描述符,可以使用 select(2)、poll(2) 或 epoll(7)。这不是便携式的。
【讨论】:
见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 */
};
【讨论】:
您希望在打开消息队列时添加 mq_attr 数据结构,然后使用 mq_getattr 函数获取属性
int mq_getattr(mqd_t mqdes, struct mq_attr *attr);
最后,看看它的 mq_curmsgs 成员
【讨论】: