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

ИМЯ
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)