是否可以确定 POSIX 消息队列中有多少条消息?

Posted

技术标签:

【中文标题】是否可以确定 POSIX 消息队列中有多少条消息?【英文标题】:Is it possible to determine how many messages are in a POSIX message queue? 【发布时间】:2021-12-23 12:28:43 【问题描述】:

我正在使用在 RHEL 机器上运行的 POSIX。有没有办法检查消息队列中剩余的消息数量(最好是 System V)?

这样做的目的只是想知道在给定时间哪些队列拥有最多的消息,以便我可以让“管理”线程以最长队列优先的方式接收消息。

我在手册页中没有看到任何关于此的内容(这些是特定于 C/C++ 且与 IPC 无关的)。

有人知道怎么做吗?

【问题讨论】:

你是如何开始创建消息队列的? msgget(KEY, 0666 | IPC_CREAT) 是我目前正在使用的。 如果您使用msgget,那么您使用的不是 POSIX 消息队列,而是 System V 消息队列。请澄清。 【参考方案1】:

您在 cmets 中说您正在使用 msgget() 创建消息队列。在这种情况下,您可以使用msgctl() 通过返回的msqid_ds::msg_qnum struct 字段来获取队列中的消息数。

【讨论】:

这正是我所需要的,谢谢!

以上是关于是否可以确定 POSIX 消息队列中有多少条消息?的主要内容,如果未能解决你的问题,请参考以下文章

POSIX 队列和 msg_max

POSIX 消息队列的替代方案

POSIX 中的消息队列

Posix消息队列

POSIX 消息队列通过内核空间?

linux进程间通信之Posix消息队列