Главная » 2017 » Ноябрь » 21 » man 2 mq_timedreceive
00:58
man 2 mq_timedreceive

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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



ОБЗОР


#include <mqueue.h>

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

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

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

Компонуется при указании параметра -lrt.

Требования макроса тестирования свойств для 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() действует подобно mq_receive(), за исключением того, что
если очередь пуста и в описании очереди сообщений не установлен флаг O_NONBLOCK,
то abs_timeout указывает на структуру, которой задаётся длительность блокировки
вызова. Это абсолютное значение задаётся в секундах и наносекундах начиная с
Эпохи, 1970-01-01 00:00:00 +0000 (UTC) в структуре вида:

struct timespec {
time_t tv_sec; /* секунды */
long tv_nsec; /* наносекунды */
};

Если сообщения нет и вышло время ожидания на момент вызова, то mq_timedreceive()
сразу же завершается.



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


При успешном выполнении mq_receive() и mq_timedreceive() возвращается количество
байт в полученном сообщении; при ошибке возвращается -1 и в errno записывается
значение ошибки.



ОШИБКИ



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),
mq_overview(7), time(7)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 413 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar