mq_receive()

Получить сообщение из очереди

Прототип:

#include <mqueue.h>
ssize_t mq_receive( mqd_t mqdes,
char *msg_ptr,
size_t msg_len,
unsigned int *msg_prio );

Аргументы:

mqdes
The message-queue descriptor, returned by mq_open(), of the message queue that you want to get a message from.
msg_ptr
A pointer to a buffer where the function can store the message received.
msg_len
The message size of the given queue.
msg_prio
NULL, or a pointer to a location where the function can store the priority of the message received.

Библиотека:

Описание:

The mq_receive() function is used to receive the oldest of the highest priority messages in the queue specified by mqdes. The priority of the message received is put in the location pointed to by msg_prio, the data itself in the location pointed to by msg_ptr, and the size received is returned.


Note: Neutrino supports two implementations of message queues: a traditional implementation, and an alternate one that uses asynchronous messages. For more information, see the entries for mq and mqueue.

If you call mq_receive() with a msg_len that's less than the mq_msgsize of the specified queue, then mq_receive() returns an error and sets errno to EMSGSIZE.

If there are no messages on the queue specified, and O_NONBLOCK wasn't set (in the oflag argument to mq_open()), then the mq_receive() call blocks. If multiple mq_receive() calls are blocked on a single queue, then they're unblocked in FIFO order as messages arrive.

In the traditional (mqueue) implementation, calling read() with mqdes is analogous to calling mq_receive() with a NULL msg_prio.

Возвращаемое значение:

Размер сообщения, удаленного из очереди. Если возникла ошибка функция возвращает -1, сообщения из очереди не удаляются а, код ошибки записывается в errno.

Коды ошибок:

EAGAIN
The O_NONBLOCK flag was set and there are no messages currently on the specified queue.
EBADF
The mqdes argument doesn't represent a valid queue open for reading.
EINTR
The operation was interrupted by a signal.
EINVAL
The msg_ptr argument isn't a valid pointer.
EMSGSIZE
The given msg_len is less than the mq_msgsize for the given queue or the given msg_len is too short for the message that would have been received.

Классификация:

POSIX 1003.1 MSG

Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

mq_close(), mq_open(), mq_send(), mq_timedreceive(), read()

mq, mqueue в Справочнике по Утилитам




Предыдущий раздел: Описание API системной библиотеки