mq_open: неверный аргумент - PullRequest
4 голосов
/ 03 апреля 2012

Я пытаюсь запустить пример программы для очередей сообщений POSIX, найденных на справочной странице для mq_notify.Я запускаю его как ./mq '/bla', и он выдаёт мне ошибку mq_open: Invalid argument.

Это строка в примере программы, которая выдает ошибку:

mqdes = mq_open(argv[1], O_RDONLY);

У меня естьпопытался изменить его на

mqdes = mq_open("/bla", O_RDONLY | O_CREAT);

, но он все еще не работает.

Это должно быть просто, но я не могу понять это.Что я делаю не так?

Кстати, это RHEL 5.8.

РЕДАКТИРОВАТЬ: Я ошибся насчет первой ошибки.Без O_CREAT он сказал: «Нет такого файла или каталога».Я думаю, он пытался открыть очередь сообщений, которой не было.С O_CREAT я думаю, что ошибка неверного аргумента была в том, что у меня было только два аргумента, а вам нужно четыре с O_CREAT.

1 Ответ

10 голосов
/ 03 апреля 2012

Просто mq_open(argv[1], O_RDONLY); должно произойти сбой с «ENOENT (нет такого файла или каталога)», если очередь сообщений не существует.

Если вы измените его на использование O_CREAT, вам нужно передать 2 дополнительных аргумента в mq_open (). (прочитайте абзац о O_CREAT).

    mq_open(argv[1], O_RDONLY | O_CREAT, 0666, NULL);
...