Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       mq_receive, mq_timedreceive - выбирают сообщения из очереди сообщений

LIBRARY

       Real-time library (librt, -lrt)

СИНТАКСИС

       #include <mqueue.h>

       ssize_t mq_receive(mqd_t mqdes, char msg_ptr[.msg_len],
                          size_t msg_len, unsigned int *msg_prio);

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

       ssize_t mq_timedreceive(mqd_t mqdes, char *restrict msg_ptr[.msg_len],
                          size_t msg_len, unsigned int *restrict msg_prio,
                          const struct timespec *restrict abs_timeout);

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

       mq_timedreceive():
           _POSIX_C_SOURCE >= 200112L

ОПИСАНИЕ

       Функция mq_receive() удаляет самое старое сообщение с наивысшим приоритетом из очереди сообщений, на
       которою указывает дескриптор очереди сообщений mqdes, и помещает сообщение в буфер, на который указывает
       msg_ptr. В аргументе msg_len задаётся размер буфера, на который указывает msg_ptr; он должен быть больше
       или равен  атрибуту очереди mq_msgsize (смотрите mq_getattr(3)). Если msg_prio не равно NULL, то
       указанный в нём буфер используется для возврата приоритета, связанного с полученным сообщением.

       Если очередь пуста, то по умолчанию функция mq_receive() блокирует выполнение до тех пор, показ не
       поступит сообщение или вызов не будет прерван обработчиком сигнала. Если в описании очереди сообщений
       включён флаг O_NONBLOCK, то вызов завершается сразу же с ошибкой EAGAIN.

       mq_timedreceive()  behaves just like mq_receive(), except that if the queue is empty 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_timedreceive() сразу же завершается.

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

       При успешном выполнении mq_receive() и mq_timedreceive()  возвращается количество байт в полученном
       сообщении; при ошибке возвращается -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_receive(), mq_timedreceive()                                     │ Безвредность в нитях │ MT-Safe  │
       └─────────────────────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008.

ЗАМЕЧАНИЯ

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

СМ. ТАКЖЕ

       mq_close(3),   mq_getattr(3),   mq_notify(3),   mq_open(3),   mq_send(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
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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

Linux man-pages 6.03                           15 декабря 2022 г.                                  mq_receive(3)