Отправить уведомления клиентам, находящимся в очереди
#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 системной библиотеки