iofunc_notify_trigger()

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

Прототип:

#include <sys/iofunc.h>
void iofunc_notify_trigger( iofunc_notify_t *nop,
int count,
int index );

Аргументы:

nop
Массив из трёх структур iofunc_notify_t: входные, выходные и нештатные списки уведомлений, записи которых необходимо проверить.
count
Значение, которое необходимо сравнить с триггерным значением для события.
index
Проверяемый индекс в массиве nop; значения:
IOFUNC_NOTIFY_INPUT
IOFUNC_NOTIFY_OUTPUT
IOFUNC_NOTIFY_OBAND

Библиотека:

libc

Описание:

Функция iofunc_notify_trigger() проверяет все записи в списке nop[index], чтобы определить, должно ли событие быть доставлено клиенту. Если счетчик count больше или равен триггерному значению для конкретного элемента списка уведомлений, то эта функция вызывает MsgDeliverEvent() для доставки события клиенту, чей rcvid хранится в списке уведомлений, элемент списка дополняется пометкой о доставке.

Обратите внимание, что если клиент указал код SI_NOTIFY, то три старших бита указанного клиентом значения (например элемента value структуры struct sigevent), объединяются побитовым ИЛИ с причиной срабатывания (выражение _NOTIFY_COND_INPUT << index) в соответствии со следующей таблицей:

index = IOFUNC_NOTIFY_INPUT
0x10000000 или _NOTIFY_COND_INPUT
index = IOFUNC_NOTIFY_OUTPUT
0x20000000 или _NOTIFY_COND_OUTPUT
index = IOFUNC_NOTIFY_OBAND
0x40000000 или _NOTIFY_COND_OBAND

Если клиент указал код, отличный от SI_NOTIFY, то значение не изменяется.

Файл <sys/iofunc.h> также определяет макросы IOFUNC_NOTIFY_INPUT_CHECK(), IOFUNC_NOTIFY_OUTPUT_CHECK() и IOFUNC_NOTIFY_OBAND_CHECK(), используемые для проверки достаточно ли в списках байт для вызова iofunc_notify_trigger() для уведомления клиентов:

#define IOFUNC_NOTIFY_INPUT_CHECK( __nop, __cnt, __tran ) ...
#define IOFUNC_NOTIFY_OUTPUT_CHECK( __nop, __cnt ) ...
#define IOFUNC_NOTIFY_OBAND_CHECK( __nop, __cnt, __tran ) ...

Аргументы:

__nop
Массив из трёх структур iofunc_notify_t: входные, выходные и нештатные списки уведомлений, записи которых необходимо проверить.
__cnt
Значение, которое необходимо сравнить с триггерным значением для события.
__tran
(только IOFUNC_NOTIFY_INPUT_CHECK() и IOFUNC_NOTIFY_OBAND_CHECK()) Ненулевое значение, если вы хотите включить триггер, когда список меняет состояние с "пустой" на "непустой" (например, как это делает mq_notify()).

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

ЗОСРВ «Нейтрино»

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

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

iofunc_notify_t, iofunc_notify(), iofunc_notify_remove(), struct sigevent




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