Man page - mq_timedreceive(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

mq_receive

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

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

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

БИБЛИОТЕКА

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

Image grohtml-618548-1.png

ВЕРСИИ

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

СТАНДАРТЫ

POSIX.1-2008.

ИСТОРИЯ

POSIX.1-2001.

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

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> и Kirill Rekhov <krekhov.dev@gmail.com>

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

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