Проблема с подключением к очереди сообщений POSIX: mq_open Нет такого файла или каталога - PullRequest
1 голос
/ 16 февраля 2020
#define MESSAGE_QUEUE_NAME "/project"    

int main (int argc, char **argv){
    char user_name[USER_NAME_LEN];
    mqd_t qd_server;
    int flags;

   if (argc != 2) {
       printf ("Usage: %s user-name\n", argv[0]);
       exit (EXIT_FAILURE);
   }
   strcpy (user_name, argv[1]);
   printf ("User %s connecting to server\n", user_name);

   if ((qd_server = mq_open (SERVER_QUEUE_NAME, O_WRONLY)) == -1) {
       perror ("Client: mq_open (server)");
       exit (1);
   }
   …

Я пытался открыть очередь сообщений перед отправкой сообщения в очередь. Перед отправкой сообщения мне нужно открыть сервер очередей, но при его запуске выдается сообщение об ошибке:

Client: mq_open (server): No such file or directory

Я просто понятия не имею, что происходит.

1 Ответ

2 голосов
/ 16 февраля 2020

Согласно справочной странице , вы получаете номер ошибки ENOENT, потому что "Флаг O_CREAT не был указан в oflag, и нет очереди с этим именем."

Итак, Возможно, вы не создали свою очередь сообщений. Вы можете создать его, если он не существует, изменив свой вызов на mq_open на mq_open(SERVER_QUEUE_NAME, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR, NULL). Вместо передачи NULL в качестве аргумента attr вы можете указать собственную структуру mq_attr с максимальной длиной очереди и размером сообщения.

...