Man page - mq_send(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

mq_send

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
АТРИБУТЫ
ВЕРСИИ
СТАНДАРТЫ
ИСТОРИЯ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

Библиотека реального времени ( 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 );

Требования макроса тестирования свойств для 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 () 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).

Image grohtml-632451-1.png

ВЕРСИИ

В Linux mq_timedsend () является системным вызовом, а mq_send () — библиотечной функцией, реализованной на основе этого системного вызова:

СТАНДАРТЫ

POSIX.1-2008.

ИСТОРИЯ

POSIX.1-2001.

СМОТРИТЕ ТАКЖЕ

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 <aereiae@gmail.com>, Alexey <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, ITriskTI <ITriskTI@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com>, Малянов Евгений Викторович <maljanow@outlook.com> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .