gpt4 book ai didi

c++ - 无法创建超过 5 个 Mqueue

转载 作者:太空狗 更新时间:2023-10-29 21:45:44 32 4
gpt4 key购买 nike

我在创建 mqueue 时遇到问题,即我的系统似乎阻止我创建超过 5 个 mqueue,即使/proc/sys/fs/mqueue/queues_max 设置为 256。我正在运行 Ubuntu 13.04在带有 Atom E680T 的 Q7 模块系统上运行服务器,我还运行自定义编译内核 (3.8.0) 以减小内核大小并添加默认缺少的看门狗和 i2c 访问。

我已经检查以确保通过安装 mqueue 接口(interface)仅使用 5 个 mqueue,在创建 5 个之后,它不会让我创建第 6 个,返回“打开的文件太多”。错误。为了确保函数调用没有任何问题,我删除了一个现有队列并再次运行我的程序,它成功地创建了队列。

我目前一头雾水,我能找到的信息表明/proc/sys/fs/mqueue/queues_max 应该控制限制,默认为 256。但是修改这个或那个文件夹中的任何其他文件不会似乎没有帮助。

因此,如果有人能指出正确的方向,说明这个限制在哪里,我将不胜感激,在大多数情况下,mqueues 是用以下变体创建的:

    mq_attr attribs;
//initialise the incoming message queue.
printLog ("I2C MANAGER: Registering mqueue.\n");
// Set attributes for main message queue
attribs.mq_maxmsg = 512;
attribs.mq_msgsize = sizeof(t_io_message);
attribs.mq_flags=0;
// Create the queue
in_queue = mq_open(I2C_MQUEUE, O_RDONLY|O_CREAT, 0666, &attribs);
// Check queue was successfully created
if (-1 == in_queue)
{
printLogf ("I2C MANAGER: Error unable to register mqueue /i2c-manager: %s.\n", strerror(errno));
exit(1);
}
else
{
printLog ("I2C MANAGER: Mqueue Initialisation succesfull.\n");
}

最佳答案

我解决了,错误消息具有误导性,不是我打开了太多的 mqueue,而是 mqueue 为这些自身分配了分配给 mqueue 系统的大部分内存。因此,当我尝试打开一个新的 mqueue 时,它​​无法获得足够的内存并无法打开。

查看其他进程的代码,我应该能够通过减少 maxmsg 值来释放空间。有些使用的队列大小为 1000,上面我从另一个进程复制粘贴的队列设置为 512 条消息,这似乎非常多。通过在两个进程中将该值减半进行了快速测试,现在我的第 6 个队列正在运行。

关于c++ - 无法创建超过 5 个 Mqueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16816378/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com