首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法创建超过5个Mqueue

无法创建超过5个Mqueue
EN

Stack Overflow用户
提问于 2013-05-29 22:18:02
回答 1查看 524关注 0票数 3

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

我已经通过挂载mqueue接口来确保只使用了5个mqueue,在创建了5个mqueue之后,它不会让我创建第6个mqueue,返回"Too me open files“。错误。为了确保函数调用没有错误,我删除了一个现有的队列,并再次运行我的程序,它成功地创建了队列。

但是修改这个或那个文件夹中的任何其他文件似乎都不会有帮助。

因此,如果有人能给我指出这个限制可能在哪里的正确方向,我将不胜感激,因为mqueue在很大程度上是使用以下内容的变体创建的:

代码语言:javascript
复制
    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");
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-30 18:36:43

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16816378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档