Отправить уведомления клиентам, находящимся в очереди
#include <sys/iofunc.h>void iofunc_notify_trigger( iofunc_notify_t *nop,int count,int index );
libc
The iofunc_notify_trigger() function examines all entries given in the list maintained at nop[index] to see if the event should be delivered to the client. If the specified count is greater than or equal to the trigger count for the particular notification list element, this function calls MsgDeliverEvent() to deliver the event to the client whose rcvid is stored in the notification list element, and the list element is disarmed.
Note that if the client has specified a code of SI_NOTIFY
, then the value that the client specified (e.g. the value member of the struct sigevent) has the top three bits ORed with the reason for the trigger (this is the expression _NOTIFY_COND_INPUT
<< index), as in the following table:
IOFUNC_NOTIFY_INPUT
0x10000000
, or _NOTIFY_COND_INPUT
IOFUNC_NOTIFY_OUTPUT
0x20000000
, or _NOTIFY_COND_OUTPUT
IOFUNC_NOTIFY_OBAND
0x40000000
, or _NOTIFY_COND_OBAND
If the client has specified a code of something other than SI_NOTIFY
then this routine doesn't modify the value member in any way.
The <sys/iofunc.h>
file also defines the IOFUNC_NOTIFY_INPUT_CHECK()
, IOFUNC_NOTIFY_OUTPUT_CHECK()
, and IOFUNC_NOTIFY_OBAND_CHECK()
macros, which you can use to see if there are enough bytes in the lists to make it worthwhile to call iofunc_notify_trigger() to notify clients about:
#define IOFUNC_NOTIFY_INPUT_CHECK( __nop, __cnt, __tran ) ...#define IOFUNC_NOTIFY_OUTPUT_CHECK( __nop, __cnt ) ...#define IOFUNC_NOTIFY_OBAND_CHECK( __nop, __cnt, __tran ) ...
The arguments are:
IOFUNC_NOTIFY_INPUT_CHECK()
and IOFUNC_NOTIFY_OBAND_CHECK()
only) Nonzero if you want to arm the trigger when the list makes the transition from empty to nonempty (for example, as mq_notify() does). ЗОСРВ «Нейтрино»
iofunc_notify_t, iofunc_notify(), iofunc_notify_remove(), struct sigevent
Предыдущий раздел: Описание API системной библиотеки