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