c++ - POSIX 队列配置

标签 c++ linux posix

我想知道如何在 linux 操作系统上配置 posix 队列。 我知道我可以在 sysctl.conf 和代码中编辑的方式

mq_open(**,**,**);

有没有其他方法可以配置每个队列的消息数和队列数。

最佳答案

您正在混合不同层的洋葱。

  1. 在单个队列层上,队列属性(mq_maxmsgmq_msgsize)在队列创建时是固定的,不能更改。 mq_curmsgs 更改没有任何意义,除非您希望破坏队列并且只能通过 mq_getattr 查询。 mq_flags 可以通过 mq_setattr` 更改,但唯一要更改的标志是切换队列的阻塞/非阻塞状态。

    实际上,很容易编写简单的命令行实用程序来完成上述大部分工作,许多组织已经拥有它们。它们通常是开发人员为自己编写的首批使用队列的程序之一。一些系统会将这些小实用程序合并到其应用程序的启动和关闭脚本中。

  2. 在进程层,消息优先级 (MQ_PRIO_MAX) 和进程可以打开的队列数 (MQ_OPEN_MAX) 有限制。在 Linux 中,这些都不是真正的问题。最大优先级类似于 32k - sysconf(_SC_MQ_PRIO_MAX) - 如果你使用那么多优先级,你就会遇到一些真正的设计问题。由于 linux 中的 mqd_t 类型是文件描述符,因此打开队列数量的真正限制因素是进程限制的文件描述符总数。

  3. 在系统级别,/proc/sys/fs/mqueue 中有限制文件,可以通过适当的权限进行更改。 (a) queues_max 是系统允许的队列数量的上限,但一旦达到此限制,特权用户仍然可以创建队列。 (b) msgsize_max 是由非特权进程创建的消息的最大消息大小。 (c) msg_max 是队列允许的最大消息大小。 (d) Linux 在/proc/sys/fs/mqueue 中还有两个文件msg_defaultmsgsize_default 应该是不言而喻的。

关于c++ - POSIX 队列配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22406011/

相关文章:

c - 在 C 中使用 POSIX 正则表达式

c++ - 为什么我会得到具有相同链接行的 undefined reference ?

c++ - 编译器如何识别其主机的硬件?哪个组件?

linux - 为什么 cat 0>file 不起作用

c++ - 在 unix 中如何关闭管道句柄? (pclose() 的 fclose())?

linux - 为什么 POSIX 函数 open() 不接受我的 path* 变量

c++ - 如何使用成员函数进行标准库范围操作

c++ - 检测C++ Qt组合中的内存泄漏?

linux - 是否可以启动缺少共享库的程序

linux - 接受(2)而不听(2)