2012-01-27 3 views
1

У меня проблема с mq_open в C, где она пытается создать очередь, но я получаю следующую ошибку ENOMEM. Я чувствую, что, возможно, я попытался создать много очередей, не отключая их, и теперь я превысил количество разрешенных. Есть ли способ отображать и удалять очереди тезисов? Это, похоже, сохраняется даже после того, как приложение было закрыто, и все последующие попытки создать также не удались.очередь сообщений ENOMEM

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

У вас есть * что-либо *, которое вызывает 'mq_close'? – spraff

+0

Я делаю, но код выходит из строя, прежде чем он попадет. – JohnB

+0

Что вы видите, если пытаетесь установить '/ dev/mqueue', как в моем ответе? – pilcrow

ответ

3

Вы спрашиваете:

Есть ли способ отображения и удалить тезисы очереди?

Это непросто. Обычные подозреваемые (ipcs, ipcrm) предназначены для системы V IPC (msgget(...)), а не POSIX IPC (mq_open(...)).

Проверьте свою mq_overview(7) manpage - ваша версия Linux может создавать очереди сообщений в виртуальной файловой системе, которые могут быть проверены с помощью типичных административных инструментов. Эта файловая система на man-странице показана так:

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

Спасибо, что это решило. Вы правильно mq_open не отображаются ipcs. У меня не было каталога/dev/mqueue, но после того, как все созданные очереди появились, это был просто случай или удаление записей. благодаря – JohnB

Смежные вопросы