Атрибуты очереди сообщений
#include <mqueue.h>
struct mq_attr {
long mq_maxmsg;
long mq_msgsize;
long mq_flags;
long mq_curmsgs;
long mq_sendwait;
long mq_recvwait;
};
Структура mq_attr
содержит информацию об атрибутах очереди сообщений, полученных с помощью функции mq_getattr(). Структура содержит следующие поля:
- mq_flags
- Параметры, установленные для описания открытой очереди сообщений (т.е. эти параметры относятся к данному дескриптору mqdes, а не к очереди в целом). Это поле могло быть изменено вызовом mq_setattr() с тех пор, как очередь была открыта.
- O_NONBLOCK
- Ни один из вызовов mq_receive() или mq_send() никогда не будет блокироваться для этой очереди. Если очередь находится в таком состоянии, что данная операция не может быть выполнена без блокировки, то возвращается ошибка, а errno устанавливается в
EAGAIN
.
- mq_maxmsg
- Максимальное количество сообщений, которое может храниться в заданной очереди. Это значение было установлено при создании очереди.
- mq_msgsize
- Максимальный размер каждого сообщения в заданной очереди сообщений. Это значение также было установлено при создании очереди.
- mq_curmsgs
- Количество сообщений, находящихся в данный момент в заданной очереди.
- mq_sendwait
- Количество потоков, в настоящее время ожидающих отправки сообщения. Это поле было исключено из стандарта POSIX после версии Draft 9, но сохранено как расширение ЗОСРВ «Нейтрино». Ненулевое значение в этом поле означает, что очередь заполнена.
- mq_recvwait
- Количество потоков, в настоящее время ожидающих получения сообщения. Как и mq_sendwait, это поле было сохранено как расширение ЗОСРВ «Нейтрино». Ненулевое значение в этом поле означает, что очередь пуста.
![Note:](./../../../../gendoc_inserted_style/images/note.png) | Альтернативная реализация (mq) очередей сообщений не поддерживает не-POSIX поля mq_sendwait и mq_recvwait. |
POSIX 1003.1 Message Passing
mq_getattr(), mq_open(), mq_setattr()
Предыдущий раздел: Описание API системной библиотеки