Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ POSIX队列配置_C++_Linux_Posix - Fatal编程技术网

C++ POSIX队列配置

C++ POSIX队列配置,c++,linux,posix,C++,Linux,Posix,我想知道如何在linux操作系统上配置posix队列。 我知道可以通过以下方式在sysctl.conf和代码中进行编辑: mq_open(**,**,**); 是否有其他方法可以配置每个队列的消息数和队列数 您正在混合不同层次的洋葱 在单个队列层上,队列属性(mq_maxmsg和mq_msgsize)在创建队列时是固定的,不能更改mq\u curmsgs更改没有任何意义,除非您希望破坏队列,并且只能通过mq\u getattr查询。mq_标志可以通过mq_setattr`更改,但唯一要更改的标

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

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

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

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

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

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

  • 在进程层上,消息优先级(
    MQ\u PRIO\u MAX
    )和进程可以打开的队列数(
    MQ\u open\u MAX
    )都有限制。在linux中,这两个问题都不是真正的问题。最大优先级类似于32k-
    sysconf(\u SC\u MQ\u PRIO\u max)
    ——如果使用那么多优先级,则会出现一些实际的设计问题。由于linux中的
    mqd_t
    类型是文件描述符,因此打开队列数量的真正限制因素是进程被限制的文件描述符总数

  • 在系统级,
    /proc/sys/fs/mqueue
    中有一些限制文件,可以使用适当的权限进行更改。(a)
    queues\u max
    是系统上允许的队列总数上限,但一旦达到此限制,特权用户仍可创建队列。(b)
    msgsize_max
    是由非特权进程创建的消息的最大消息大小。(c)
    msg_max
    是队列允许的最大消息大小。(d) Linux在
    /proc/sys/fs/mqueue
    中还有两个文件
    msg_default
    msgsize_default
    ,这应该是不言而喻的