Получить сообщение из очереди
#include <mqueue.h>ssize_t mq_receive( mqd_t mqdes,char *msg_ptr,size_t msg_len,unsigned int *msg_prio );
NULL
, или указатель на место, куда функция сможет сохранить приоритет полученного сообщения.
Функция mq_receive() получает самое старое из сообщений с наивысшим приоритетом в очереди, заданной mqdes. Приоритет полученного сообщения помещается в место, на которое указывает msg_prio, сами данные — в место, на которое указывает msg_ptr, при этом возвращается размер полученного сообщения.
Нейтрино поддерживает две реализации очередей сообщений: классическую реализацию и альтернативную, использующую асинхронные сообщения. Для дополнительной информации см. документацию по mq и mqueue. |
Если вы вызываете функцию mq_receive() со значением параметра msg_len, меньшим, чем значение mq_msgsize для заданной очереди, то mq_receive() возвращает ошибку и устанавливает errno в EMSGSIZE
.
Если в заданной очереди нет сообщений и O_NONBLOCK
не установлен (в параметре oflag при вызове функции mq_open()), то вызов mq_receive() блокируется. Если несколько вызовов mq_receive() заблокированы для одной очереди, они разблокируются в порядке FIFO по мере поступления сообщений.
В классической реализации ( mqueue), вызов функции read() с дескриптором mqdes аналогичен вызову функции mq_receive() с параметром msg_prio, равным NULL
.
Размер сообщения, удалённого из очереди. Если возникла ошибка, функция возвращает -1
, сообщения из очереди не удаляются, а код ошибки записывается в errno.
O_NONBLOCK
, и в указанной очереди в настоящее время нет сообщений. POSIX 1003.1 Message Passing
mq_close(), mq_open(), mq_send(), mq_timedreceive(), read()
mq, mqueue в Справочнике по Утилитам
Предыдущий раздел: Описание API системной библиотеки