SIGEVENT(7)

ИМЯ
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.

    В зависимости от программного интерфейса остальным полям в структуре siginfo_t также могут быть присвоены значения.

    Эта информация также доступна, если сигнал принимается с помощью sigwaitinfo(2).

SIGEV_THREAD
    Уведомить процесс с помощью вызова sigev_notify_function «как если бы» это была бы начальная функция новой нити (среди возможностей реализации здесь может быть: каждое уведомление таймера приводит к созданию новой нити, или создаётся нить для получения всех уведомлений). Функция вызывается с единственным аргументом 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)