Provided by: manpages-ru-dev_4.18.1-1_all bug

ИМЯ

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

LIBRARY

       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);

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

       ┌───────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ИнтерфейсАтрибутЗначение │
       ├───────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │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 <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>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.