Как решить ошибку msgget: на устройстве не осталось места?

Я пишу приложение IPC, используя очереди сообщений. При использовании функции msgget() для получения очереди сообщений я получаю эту ошибку.

Запрошенные операции не требуют много места на устройстве, и место должно быть оставлено.

Любые идеи. заранее спасибо


person Alex Xander    schedule 12.10.2009    source источник


Ответы (1)


ENOSPC из msgget указывает, что достигнуто максимальное количество очередей сообщений для всей системы.

Вы можете настроить это ограничение - например, в Linux вы можете настроить /proc/sys/kernel/msgmni.

person caf    schedule 12.10.2009
comment
Я так не считаю, это административно установленный лимит ресурсов. echo "Please increase number of message queues." | mail root@localhost наверное лучшее, что вы можете сделать ;) - person caf; 12.10.2009
comment
@Alex - если ваша машина вообще не настроена для поддержки очередей сообщений или недостаточно очередей сообщений, кто-то должен ее перенастроить. Этому человеку потребуются привилегии root. Если это не вы, поговорите с администратором. Или используйте что-то другое, кроме msgget(). - person Jonathan Leffler; 12.10.2009
comment
Спасибо всем! Я получил root-доступ и отредактировал /proc/sys/kernel/msgmni. - person Alex Xander; 13.10.2009
comment
Имейте в виду, что изменения в sysctl, сделанные с помощью /proc/, не сохраняются после перезагрузки — чтобы сделать их постоянными, добавьте строку в /etc/sysctl.conf, например kernel.msgmni = 2000. - person caf; 13.10.2009