Отправить уведомления клиентам, находящимся в очереди
#include <sys/iofunc.h>void iofunc_notify_trigger( iofunc_notify_t *nop,int count,int index );
libc
Функция iofunc_notify_trigger() проверяет все записи в списке nop[index], чтобы определить, должно ли событие быть доставлено клиенту. Если счетчик count больше или равен триггерному значению для конкретного элемента списка уведомлений, то эта функция вызывает MsgDeliverEvent() для доставки события клиенту, чей rcvid хранится в списке уведомлений, элемент списка дополняется пометкой о доставке.
Обратите внимание, что если клиент указал код SI_NOTIFY, то три старших бита указанного клиентом значения (например элемента value структуры struct sigevent), объединяются побитовым ИЛИ с причиной срабатывания (выражение _NOTIFY_COND_INPUT << index) в соответствии со следующей таблицей:
IOFUNC_NOTIFY_INPUT 0x10000000 или _NOTIFY_COND_INPUT IOFUNC_NOTIFY_OUTPUT 0x20000000 или _NOTIFY_COND_OUTPUT 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 ) ...
Аргументы:
IOFUNC_NOTIFY_INPUT_CHECK() и IOFUNC_NOTIFY_OBAND_CHECK()) Ненулевое значение, если вы хотите включить триггер, когда список меняет состояние с "пустой" на "непустой" (например, как это делает mq_notify()). ЗОСРВ «Нейтрино»
iofunc_notify_t, iofunc_notify(), iofunc_notify_remove(), struct sigevent
Предыдущий раздел: Описание API системной библиотеки