我在创建 mqueue 时遇到问题,即我的系统似乎阻止我创建超过 5 个 mqueue,即使 /proc/sys/fs/mqueue/queues_max 设置为 256。我正在运行 Ubuntu 13.04 服务器上带有 Atom E680T 的 Q7 模块系统,我还在运行自定义编译内核 (3.8.0) 以减小内核大小并添加默认情况下缺少的看门狗和 i2c 访问。
我已经检查以确保通过安装 mqueue 接口只使用了 5 个 mqueue,在创建 5 个之后它不会让我创建第 6 个,返回“打开的文件太多”。错误。为了确保函数调用没有问题,我删除了一个现有队列并再次运行我的程序,它成功地创建了队列。
我目前不知所措,我能找到的信息表明 /proc/sys/fs/mqueue/queues_max 应该控制限制,并且默认为 256。但是修改该文件夹中的这个或任何其他文件并没有出现帮助。
因此,如果有人能指出我的正确方向,我将不胜感激,在大多数情况下,mqueue 是通过以下变体创建的:
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");
}