mq_send, mq_timedsend -
отправляет
сообщение
в очередь
сообщений
Real-time library (
librt,
-lrt)
#include <mqueue.h>
int mq_send(mqd_t mqdes, const char msg_ptr[.msg_len],
size_t msg_len, unsigned int msg_prio);
#include <time.h>
#include <mqueue.h>
int mq_timedsend(mqd_t mqdes, const char msg_ptr[.msg_len],
size_t msg_len, unsigned int msg_prio,
const struct timespec *abs_timeout);
mq_timedsend():
_POSIX_C_SOURCE >= 200112L
Функция
mq_send()
добавляет
сообщение,
на которое
указывает
msg_ptr, в
очередь
сообщений,
на которую
ссылается
дескриптор
очереди
сообщений
mqdes. В
аргументе
msg_len
задаётся
длина
сообщения,
на которое
указывает
msg_ptr; эта
длина
должна
быть
меньше или
равно
атрибуту
очереди
mq_msgsize.
Допускаются
сообщения
нулевой
длины.
Значение
аргумента
msg_prio
представляет
собой
неотрицательное
целое,
которым
определяется
приоритет
этого
сообщения.
Сообщения
помещаются
в очередь в
порядке
уменьшения
приоритета,
самые
новые
сообщения
с
одинаковым
приоритетом
размещаются
после
старых с
тем же
приоритетом.
Описание
диапазона
приоритета
сообщения
смотрите в
mq_overview(7).
Если
очередь
сообщений
заполнена
(т. е.,
количество
сообщений
в очереди
равно
атрибуту
очереди
mq_maxmsg),
то по
умолчанию
mq_send()
блокируется
до
появления
места для
записи
сообщения,
или пока
вызов не
будет
прерван
обработчиком
сигнала.
Если в
описании
очереди
сообщений
включён
флаг
O_NONBLOCK, то
вместо
этого
вызов
сразу
завершается
с ошибкой
EAGAIN.
mq_timedsend() behaves just like
mq_send(), except that if the
queue is full and the
O_NONBLOCK flag is not enabled for the message
queue description, then
abs_timeout points to a structure which
specifies how long the call will block. This value is an absolute timeout in
seconds and nanoseconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC),
specified in a
timespec(3) structure.
Если
очередь
сообщений
полна и
вышло
время
ожидания
на момент
вызова, то
mq_timedsend() сразу
же
завершается.
При
успешном
выполнении
mq_send() и
mq_timedsend()
возвращается
ноль; при
ошибке
возвращается
-1, а в
errno
помещается
код ошибки.
- EAGAIN
- Очередь
была полна
и в
описании
очереди
сообщений,
на которое
ссылается
mqdes, указан
флаг O_NONBLOCK.
- EBADF
- В mqdes
указан
некорректный
или не
открытый
на запись
дескриптор.
- EINTR
- Вызов
был
прерван
обработчиком
сигнала;
смотрите
signal(7).
- EINVAL
- Вызов бы
заблокировался
и в abs_timeout
указано
некорректное
значение,
так как tv_sec
меньше
нуля или tv_nsec
меньше
нуля или
более 1000
миллионов.
- EMSGSIZE
-
msg_len
больше, чем
свойство
очереди
сообщений
mq_msgsize.
- ETIMEDOUT
- Истёк
период
ожидания в
вызове,
раньше
появления
возможности
передачи
сообщения.
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
mq_send(), mq_timedsend() |
Безвредность
в нитях |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
В Linux
mq_timedsend()
является
системным
вызовом, а
mq_send() —
библиотечной
функцией,
реализованной
на основе
этого
системного
вызова:
mq_close(3),
mq_getattr(3),
mq_notify(3),
mq_open(3),
mq_receive(3),
mq_unlink(3),
timespec(3),
mq_overview(7),
time(7)
Русский
перевод
этой
страницы
руководства
был сделан
aereiae <
[email protected]>, Alexey <
[email protected]>, Azamat
Hackimov <
[email protected]>, Dmitriy S. Seregin
<
[email protected]>, Dmitry Bolkhovskikh <
[email protected]>,
ITriskTI <
[email protected]>, Max Is <
[email protected]>, Yuri
Kozlov <
[email protected]>, Иван
Павлов <
[email protected]>
и Малянов
Евгений
Викторович
<
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]