ИМЯ sigevent - структура для уведомления из асинхронных процедур
ОБЗОР #include <signal.h>
union sigval { /* Данные, передаваемые с уведомлением */ int sival_int; /* целое */ void *sival_ptr; /* указатель */ };
struct sigevent { int sigev_notify; /* метод уведомления */ int sigev_signo; /* сигнал уведомления */ union sigval sigev_value; /* данные, передаваемые с уведомлением */ void (*sigev_notify_function) (union sigval); /* функция, используемая для нити notification (SIGEV_THREAD) */ void *sigev_notify_attributes; /* атрибуты для уведомления нити (SIGEV_THREAD) */ pid_t sigev_notify_thread_id; /* ID нити для уведомления (SIGEV_THREAD_ID) */ };
ОПИСАНИЕ Структура sigevent используется в различных программных интерфейсах для описания способа, которым нужно уведомлять процесс о событии (например, окончание асинхронного запроса, истечение таймера или поступление сообщения).
Определение, приведённое в ОБЗОРЕ, приблизительно: некоторые поля в структуре sigevent могут быть определены как часть объединения. Программы должны использовать только те поля, которые применимы к значению, заданном в sigev_notify.
В поле sigev_notify задаётся как выполняется уведомление. Значением поля может быть:
SIGEV_NONE «Пустое» уведомление: ничего не делать при возникновении события.
SIGEV_SIGNAL Уведомить процесс, отправив сигнал, указанный в sigev_signo.
Если сигнал пойман обработчиком сигнала, который зарегистрирован с помощью sigaction(2) с флагом SA_SIGINFO, то следующим полям назначаются значения в структуре siginfo_t, передаваемой во втором аргументе обработчика:
si_code В этом поле задаётся значение, которое зависит от программного интерфейса, доставляющего уведомление.
si_signo В этом поле указывается номер сигнала (т. е., тоже значение, что и в sigev_signo).
si_value В этом поле содержится значение, указанное в sigev_value.
может быть: каждое уведомление таймера приводит к созданию новой нити, или создаётся нить для получения всех уведомлений). Функция вызывается с единственным аргументом sigev_value. Если sigev_notify_attributes не равно NULL, то значение должно указывать на структуру pthread_attr_t, в которой определены атрибуты новой нити (смотрите pthread_attr_init(3)).
SIGEV_THREAD_ID (есть только в Linux) В настоящее время используется только таймерами POSIX; смотрите timer_create(2).
СМОТРИТЕ ТАКЖЕ timer_create(2), aio_fsync(3), aio_read(3), aio_write(3), getaddrinfo_a(3), lio_listio(3), mq_notify(3), aio(7), pthreads(7)
|