C++ 无法创建超过5个MQUE

C++ 无法创建超过5个MQUE,c++,ubuntu,mq,mqueue,C++,Ubuntu,Mq,Mqueue,我在创建MQUE时遇到问题,即我的系统似乎阻止我创建5个以上的MQUE,即使/proc/sys/fs/MQUE/queues_max设置为256。我在一个Q7模块系统上运行Ubuntu13.04服务器,使用Atom E680T,我还运行一个自定义编译内核(3.8.0),以减少内核大小,并添加默认配置中缺少的看门狗和i2c访问 我已检查以确保挂载MQUE接口时只使用了5个MQUE,在创建了5个MQUE接口后,它将不允许我创建第6个MQUE,返回“太多打开的文件”。错误。为了确保函数调用没有问题,我

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

我已检查以确保挂载MQUE接口时只使用了5个MQUE,在创建了5个MQUE接口后,它将不允许我创建第6个MQUE,返回“太多打开的文件”。错误。为了确保函数调用没有问题,我删除了一个现有队列并再次运行我的程序,它成功地创建了队列

我目前不知所措,我能找到的信息表明/proc/sys/fs/mqueue/queues_max应该控制限制,默认值为256。但修改该文件夹或该文件夹中的任何其他文件似乎没有帮助

因此,如果有人能为我指出这一限制的正确方向,我将不胜感激,因为在大多数情况下,MQUE的创建都有以下变化:

    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");
}

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


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

我计算出来了,错误消息是误导性的,不是我打开了太多MQUE,而是MQUE为这些自身分配了分配给MQUE系统的大部分内存。因此,当我尝试打开一个新的MQUE时,它无法获得足够的内存,无法打开。似乎maxmsg是关键,我们的一些进程使用的队列大小为1000,上面我从另一个进程复制粘贴的队列大小设置为512条消息,这似乎太多了。通过在两个进程中将该值减半进行了快速测试,现在我运行了第六个队列。您得到了什么错误?在第一篇文章中说,strerror()返回“打开的文件太多”。您上面的评论应该是答案。你是在为内存不足的嵌入式系统开发吗?我的问题已经解决了,我的第一个评论是什么解决了我的问题。我之所以没有把它作为答案,是因为我没有足够高的声誉来回答我自己的问题,直到我发布问题8小时后。因为我正要回家,我不想让人们浪费时间来帮助我解决一个问题,所以我把它放在评论部分。现在我必须等到明天才能接受我自己的答案,但是nvm,很抱歉给你带来困惑。