POSIX-owe kolejki komunikatów

0

Witam
Mam problem z wykorzystaniem kolejek komunikatów POSIX - utworzona kolejka powinna być domyślnie w trybie blokującym czyli próba odczytania komunikatu z pustej kolejki powinna spowodować wstrzymanie wykonania danego wątku aż do momentu, kiedy w kolejce pojawi się jakaś wiadomość. U mnie próba odczytania czegokolwiek z pustej kolejki kończy się zwróceniem -1 i errno: 90.

stop_msg = mq_open(buffer, O_RDWR | O_CREAT, (mode_t *)0664, NULL);
ret = mq_receive(stop_msg, (char *)msg, sizeof(struct Message), NULL);

Jakieś pomysły?

1
#define EMSGSIZE    90  /* Message too long */

EMSGSIZE
msg_len was less than the mq_msgsize attribute of the message
queue.

Więc już wiemy jaki jest błąd. A teraz skąd jest? Bo nie czytasz dokumentacji tylko na pałe używasz funkcji...

If O_CREAT is specified in oflag, then two additional arguments must
be supplied. The mode argument specifies the permissions to be
placed on the new queue, as for open(2). (Symbolic definitions for
the permissions bits can be obtained by including <sys/stat.h>.) The
permissions settings are masked against the process umask.

The attr argument specifies attributes for the queue. See
mq_getattr(3) for details. If attr is NULL, then the queue is
created with implementation-defined default attributes. Since Linux
3.5, two /proc files can be used to control these defaults; see
mq_overview(7) for details.

Wiem wiem, dokumentacja gryzie. Po co ją czytać?...
http://man7.org/linux/man-pages/man3/mq_open.3.html

0

Dodałem strukturę mq_attr zamiast NULL przy tworzeniu kolejki, pomogło. Myślałem, że domyślne parametry wystarczą. Dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1