sigevent
—
asynchronous event notification
Some operations permit threads to request asynchronous notification of events
via a struct sigevent structure. This structure contains
several fields that describe the requested notification:
Type |
Member |
Description |
int |
sigev_notify |
notification method |
int |
sigev_signo |
signal number |
union sigval |
sigev_value |
signal value |
int |
sigev_notify_kqueue |
kqueue(2)
file descriptor |
unsigned short |
sigev_notify_kevent_flags |
kevent flags |
lwpid_t |
sigev_notify_thread_id |
LWP ID |
void (*)(union sigval) |
sigev_notify_function |
callback function pointer |
pthread_attr_t * |
sigev_notify_attributes |
callback thread attributes |
The sigev_notify field specifies the
notification method used when the event triggers:
SIGEV_NONE
- No notification is sent.
SIGEV_SIGNAL
- The signal sigev_signo is queued as a real-time
signal to the calling process. The value stored in
sigev_value will be present in the
si_value of the siginfo_t
structure of the queued signal.
SIGEV_THREAD
- The notification function in sigev_notify_function
is called in a separate thread context. The thread is created with the
attributes specified in *sigev_notify_attributes.
The value stored in sigev_value is passed as the
sole argument to sigev_notify_function. If
sigev_notify_attributes is
NULL
, the thread is created with default
attributes.
SIGEV_KEVENT
- A new kevent is posted to the kqueue
sigev_notify_kqueue. The udata
member of the kevent structure contains the value stored in
sigev_value. The meaning of other fields in the
kevent are specific to the type of triggered event.
SIGEV_THREAD_ID
- The signal sigev_signo is queued to the thread whose
LWP ID is sigev_notify_thread_id. The value stored
in sigev_value will be present in the
si_value of the siginfo_t
structure of the queued signal.
Note that programs wishing to use SIGEV_THREAD
notifications must link against the POSIX Real-time Library
(librt, -lrt).
The struct sigevent type conforms to IEEE
Std 1003.1-2004 (“POSIX.1”).
The sigevent structure first appeared in
FreeBSD 3.3.