Главная » 2017 » Ноябрь » 21 » man 2 mq_timedsend
00:58
man 2 mq_timedsend

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


mq_send, mq_timedsend - отправляет сообщение в очередь сообщений



ОБЗОР


#include <mqueue.h>

int mq_send(mqd_t mqdes, const char *msg_ptr,
size_t msg_len, unsigned int msg_prio);

#include <time.h>
#include <mqueue.h>

int mq_timedsend(mqd_t mqdes, const char *msg_ptr,
size_t msg_len, unsigned int msg_prio,
const struct timespec *abs_timeout);

Компонуется при указании параметра -lrt.

Требования макроса тестирования свойств для glibc (смотрите feature_test_macros(7)):

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() действует подобно mq_send(), за исключением того, что если
очередь пуста и в описании очереди сообщений не установлен флаг O_NONBLOCK, то
abs_timeout указывает на структуру, в которой задаётся длительность блокировки
вызова. Это абсолютное значение задаётся в секундах и наносекундах начиная с
Эпохи, 1970-01-01 00:00:00 +0000 (UTC), в структуре вида:

struct timespec {
time_t tv_sec; /* секунды */
long tv_nsec; /* наносекунды */
};

Если очередь сообщений полна и вышло время ожидания на момент вызова, то
mq_timedsend() сразу же завершается.



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


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),
mq_overview(7), time(7)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 405 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar