Запрос получения уведомления, когда в очереди есть сообщение
#include <mqueue.h>int mq_notify( mqd_t mqdes,const struct sigevent *notification );
NULL
или указатель на структуру struct sigevent, в которой описано, как именно необходимо получать уведомления.
Если значение параметра notification не равно NULL
, функция mq_notify() запрашивает у сервера уведомление о том, что очередь стала непустой. Способ, с помощью которого сервер должен уведомить процесс, передаётся в структуре struct sigevent, указатель на которую передаётся параметром notification. Как только сервер очереди сообщений уведомляет процесс о смене состояния, уведомление удаляется.
Нейтрино поддерживает две реализации очередей сообщений: классическую реализацию и альтернативную, использующую асинхронные сообщения. Для дополнительной информации см. документацию по mq и mqueue. |
Рекомендуется использовать следующие типы событий:
В общем случае только один процесс может одновременно зарегистрироваться для получения уведомлений. Если процесс пытается зарегистрироваться для получения уведомлений, а другой процесс уже это сделал, возвращается ошибка, а errno устанавливается в EBUSY
.
Если один процесс зарегистрирован для получения уведомлений, а другой процесс заблокирован на вызове mq_receive(), то вызов mq_receive() завершается при поступлении любого сообщения. В результате поведение выглядит так, как если бы очередь сообщений оставалась пустой.
Если значение параметра notification равно NULL
и текущий процесс в настоящее время зарегистрирован для получения уведомлений, то существующая регистрация отменяется.
POSIX 1003.1 Message Passing
mq_open(), mq_receive(), mq_send(), struct sigevent
mq, mqueue в Справочнике по Утилитам
Предыдущий раздел: Описание API системной библиотеки