iofunc_notify()

Установить, опросить или удалить обработчик уведомлений

Прототип:

#include <sys/iofunc.h>
int iofunc_notify( resmgr_context_t *ctp,
io_notify_t *msg,
iofunc_notify_t *nop,
int trig,
const int *notifycounts,
int *armed );

Аргументы:

ctp
A pointer to a resmgr_context_t structure that the resource-manager library uses to pass context information between functions.
msg
A pointer to the io_notify_t structure that contains the message that the resource manager received.
nop
An array of iofunc_notify_t structures that represent the events supported by the calling resource manager. Traditionally this array contained three members which represent, in order, the input, output, and out-of-band notification lists. Since the addition of extended events (see below), three is now the minimum size of this array. The actual size must support indexing by the conditions being triggered up to _NOTIFY_MAXCOND.

Generally, this structure is maintained by the resource manager within an extended attributes structure.
trig
A bitmask indicating which sources are currently satisfied, and could cause a trigger to occur. This bitmask may be indicated via two sets of flags. Traditionally, the value was any combination of _NOTIFY_COND_INPUT, _NOTIFY_COND_OUTPUT and _NOTIFY_COND_OBAND, but you can set _NOTIFY_COND_EXTEN so that you can specify the following extended events:
_NOTIFY_CONDE_RDNORM
normal data is available.
_NOTIFY_CONDE_WRNORM
room for normal data.
_NOTIFY_CONDE_RDBAND
out-of-band data is available.
_NOTIFY_CONDE_PRI
priority data is available.
_NOTIFY_CONDE_WRBAND
room for OOB data.
_NOTIFY_CONDE_ERR
an error occurred on the device or stream.
_NOTIFY_CONDE_HUP
the device has been disconnected.
_NOTIFY_CONDE_NVAL
the file descriptor is invalid.
Note that the following flags are considered equivalent:
_NOTIFY_COND_INPUT == _NOTIFY_CONDE_RDNORM
_NOTIFY_COND_OUTPUT == _NOTIFY_CONDE_WRNORM
_NOTIFY_COND_OBAND == _NOTIFY_CONDE_RDBAND
Setting the _NOTIFY_COND_EXTEN flag affects the armed parameter. You typically set this value, based on the conditions in effect at the time of the call.
notifycounts
NULL, or an array of integers representing the number of elements that must be present in the queue of each event represented by the nop array in order for the event to be triggered. Both this array and the nop array should contain the same number of elements. Note that if any condition is met, nothing is armed. Only if none of the conditions are met, does the event get armed in accordance with the notifycounts parameter. If this parameter is NULL, a value of 1 is assumed for all counts.
armed
NULL, or a pointer to a location where the function can store a 1 to indicate that a notification entry is armed, or a 0 otherwise.

If you set the _NOTIFY_COND_EXTEN bit in the trig argument, and armed isn't NULL, then when you call iofunc_notify(), armed must contain the number of elements in the nop and notifycounts arrays (provided notifycounts isn't NULL). Otherwise, the function assumes there are three elements in the nop and notifycounts arrays.

Библиотека:

libc

Описание:

The POSIX layer helper function iofunc_notify() is used by a resource manager to implement notification.

This routine examines the message that the resource manager received (passed in the msg argument), and determines what action the client code is attempting to perform:

_NOTIFY_ACTION_POLL
Return a one-part IOV with the flags field set to indicate which conditions (input, output, or out-of-band) are available. The caller should return ( _RESMGR_NPARTS( 1 )) to the resource manager library, which returns a one-part message to the client.
_NOTIFY_ACTION_POLLARM
Similar to _NOTIFY_ACTION_POLL, with the additional characteristic of arming the event if none of the conditions is met.
_NOTIFY_ACTION_TRANARM
For each of the sources specified, create a notification entry and store the client's struct sigevent event structure in it. Note that only one transition arm is allowed at a time per device. If the client specifies an event of SIGEV_NONE, the action is to disarm. When the event is triggered, the notification is automatically disarmed.

Возвращаемое значение:

-1
Успешное завершение; the resource manager library should return a one-part IOV to the client.
EBUSY
A notification was already armed for this resource, and this library function enforces a restriction of one per resource.

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

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

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

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

io_notify_t, iofunc_notify_t, iofunc_notify_remove(), iofunc_notify_trigger(), resmgr_context_t, _RESMGR_NPARTS(), struct sigevent




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