mq_send()

Отправить сообщение в очередь

Прототип:

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

Аргументы:

mqdes
Дескриптор очереди сообщений, в которую необходимо отправить сообщение, возвращённый функцией mq_open().
msg_ptr
Указатель на сообщение, которое необходимо отправить.
msg_len
Размер сообщения.
msg_prio
Приоритет сообщения в диапазоне от 0 до (MQ_PRIO_MAX - 1).

Библиотека:

Описание:

Функция mq_send() помещает сообщение размера msg_len, которое передаётся указателем msg_ptr, в очередь, заданную параметром mqdes. Новое сообщение имеет приоритет, заданный параметром msg_prio.


Note: Нейтрино поддерживает две реализации очередей сообщений: классическую реализацию и альтернативную, использующую асинхронные сообщения. Для дополнительной информации см. документацию по mq и mqueue.

Очередь устанавливается в порядке приоритета, а в пределах одного и того же приоритета - в порядке FIFO.

Если количество элементов в заданной очереди равно значению mq_maxmsg для этой очереди, а также флаг O_NONBLOCK не установлен (в параметре oflag при вызове функции mq_open()), вызов mq_send() блокируется. Он разблокируется, когда в очереди появляется место для отправки данного сообщения. Если для данной очереди заблокировано более одного вызова mq_send(), а также становится доступным место для отправки сообщения, разблокируется вызов mq_send() с сообщением, имеющим наивысший приоритет.

В классической реализации ( mqueue), вызов функции write() с дескриптором mqdes аналогичен вызову функции mq_send() с параметром msg_prio, равным 0.

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

-1
Возникла ошибка. Код ошибки записан в errno.
≠-1
Успешное завершение.

Коды ошибок:

EAGAIN
Флаг O_NONBLOCK установлен при открытии очереди и эта очередь заполнена.
EBADF
Параметр mqdes не представляет собой допустимый дескриптор очереди сообщений, или очередь mqdes не открыта для записи.
EINTR
Вызов прерван сигналом.
EINVAL
Верно одно из следующего:
EMSGSIZE
Значение параметра msg_len больше, чем значение msgsize для заданной очереди.

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

POSIX 1003.1 Message Passing

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

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

mq_close(), mq_open(), mq_receive(), mq_timedsend()

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




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