mq_notify()

Запрос получения уведомления, когда в очереди есть сообщение

Прототип:

#include <mqueue.h>
int mq_notify( mqd_t mqdes,
const struct sigevent *notification );

Аргументы:

mqdes
Дескриптор очереди сообщений, возвращенный функцией mq_open(), для которой необходимо получить уведомление.
notification
NULL или указатель на структуру struct sigevent, в которой описано, как именно необходимо получать уведомления.

Библиотека:

Описание:

Если значение параметра notification не равно NULL, функция mq_notify() запрашивает у сервера уведомление о том, что очередь стала непустой. Способ, с помощью которого сервер должен уведомить процесс, передаётся в структуре struct sigevent, указатель на которую передаётся параметром notification. Как только сервер очереди сообщений уведомляет процесс о смене состояния, уведомление удаляется.


Note: Нейтрино поддерживает две реализации очередей сообщений: классическую реализацию и альтернативную, использующую асинхронные сообщения. Для дополнительной информации см. документацию по mq и mqueue.

Рекомендуется использовать следующие типы событий:

SIGEV_SIGNAL
SIGEV_SIGNAL_CODE
SIGEV_SIGNAL_THREAD
SIGEV_PULSE

В общем случае только один процесс может одновременно зарегистрироваться для получения уведомлений. Если процесс пытается зарегистрироваться для получения уведомлений, а другой процесс уже это сделал, возвращается ошибка, а errno устанавливается в EBUSY.

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

Если значение параметра notification равно NULL и текущий процесс в настоящее время зарегистрирован для получения уведомлений, то существующая регистрация отменяется.

Возвращаемое значение:

-1
Возникла ошибка. Код ошибки записан в errno.
≠-1
Успешное завершение.

Коды ошибок:

EBADF
Недопустимая очередь сообщений, заданная параметром mqdes.
EBUSY
Процесс уже зарегистрирован для получения уведомлений по данной очереди.

Классификация:

POSIX 1003.1 Message Passing

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

mq_open(), mq_receive(), mq_send(), struct sigevent

mq, mqueue в Справочнике по Утилитам




Предыдущий раздел: Описание API системной библиотеки