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