我想知道如何在 linux 操作系统上配置 posix 队列。 我知道我可以在 sysctl.conf 和代码中编辑的方式
mq_open(**,**,**);
有没有其他方法可以配置每个队列的消息数和队列数。
最佳答案
您正在混合不同层的洋葱。
在单个队列层上,队列属性(
mq_maxmsg
和mq_msgsize
)在队列创建时是固定的,不能更改。mq_curmsgs
更改没有任何意义,除非您希望破坏队列并且只能通过mq_getattr
查询。mq_flags
可以通过 mq_setattr` 更改,但唯一要更改的标志是切换队列的阻塞/非阻塞状态。实际上,很容易编写简单的命令行实用程序来完成上述大部分工作,许多组织已经拥有它们。它们通常是开发人员为自己编写的首批使用队列的程序之一。一些系统会将这些小实用程序合并到其应用程序的启动和关闭脚本中。
在进程层,消息优先级 (
MQ_PRIO_MAX
) 和进程可以打开的队列数 (MQ_OPEN_MAX
) 有限制。在 Linux 中,这些都不是真正的问题。最大优先级类似于 32k -sysconf(_SC_MQ_PRIO_MAX)
- 如果你使用那么多优先级,你就会遇到一些真正的设计问题。由于 linux 中的mqd_t
类型是文件描述符,因此打开队列数量的真正限制因素是进程限制的文件描述符总数。在系统级别,
/proc/sys/fs/mqueue
中有限制文件,可以通过适当的权限进行更改。 (a)queues_max
是系统允许的队列数量的上限,但一旦达到此限制,特权用户仍然可以创建队列。 (b)msgsize_max
是由非特权进程创建的消息的最大消息大小。 (c)msg_max
是队列允许的最大消息大小。 (d) Linux 在/proc/sys/fs/mqueue
中还有两个文件msg_default
和msgsize_default
应该是不言而喻的。
关于c++ - POSIX 队列配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22406011/