消息队列ENOMEM

时间:2012-01-27 15:21:17

标签: c linux linux-kernel

我在C中遇到mq_open问题,它尝试创建队列,但我收到以下错误ENOMEM。我觉得我可能试图创建到许多队列而不断开它们,现在我已超过允许的数量。有没有方法显示和删除这些队列?即使在应用程序关闭之后,这似乎仍然存在,并且所有后续的创建尝试也都失败了。

sprintf(idTmp->name, "/%08x%d", (uint32_t) idTmp, rand());
if ((idTmp->mq = mq_open(idTmp->name, O_CREAT, 0x666, NULL)) == -1)

1 个答案:

答案 0 :(得分:3)

你问:

  

是否有方法显示并删除这些队列?

这并不容易。通常的嫌疑人(ipcsipcrm)是为System V IPC(msgget(...))设计的,而不是POSIX IPC(mq_open(...))。

检查您的mq_overview(7)联机帮助页 - 您的Linux版本可能会在虚拟文件系统上创建消息队列,可以使用典型的管理工具进行检查。根据联机帮助页,该文件系统如下所示:

[root]# mkdir /dev/mqueue
[root]# mount -t mqueue none /dev/mqueue
... now ls and rm your way around ...