posix_msgqueue 报Error Opening MQ: : Invalid argument

本文介绍了在Ubuntu 16.04 LTS系统中,POSIX消息队列的限制,包括msg_max和msgsize_max的数值限制,以及如何避免`Invalid argument`错误。通过分析/proc/sys/fs/mqueue/目录下的配置文件,了解到msg_default、msg_max、msgsize_default和msgsize_max等参数的含义,并强调消息队列名称前需加斜杆的规则。根据这些信息,解决了程序中maxmsg参数超过系统限制的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经四处查找,终于发现原因:

(1)attr.mq_maxmsg 不能超过文件 /proc/sys/fs/mqueue/msg_max 中的数值,我的机器上面是10。

(2)attr.mq_msgsize不能超过 /proc/sys/fs/mqueue/msgsize_max 的数值。

(3)消息队列名称前面必须加上斜杆。

详细请参考:命令“man mq_overview”

在man pages的第7章有关于消息队列的综述。

有一段叫/proc interfaces的标签,说明了一些限制问题。

The following interfaces can be used to limit the amount of kernel memory  consumed by POSIX message queues and to set the default attributes for new message queues:

大意为:

以下接口可用于限制被POSIX消息队列消耗,和被设置新消息队列属性所消耗的内核内存量。

并且给出/proc/sys/fs/mqueue/目录下的文件详细解释

//文件内容如下:
msg_default         10
msg_max             10  
msgsize_default     8192
msgsize_max         8192
queues_max          256
//本机系统为Ubuntu 16.04 LTS 64位

而UNP书上执行程序参数maxmsg为1024,已经超过系统限制的10。因此,总是提示错误信息:Invalid argument。
当将maxmsg参数大小小于等于10时,程序编译通过。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值