SignalWaitinfo(), SignalWaitinfo_r()

Выбрать сигнал из очереди ожидающих сигналов процесса

Прототип:

#include <sys/neutrino.h>
int SignalWaitinfo( const sigset_t *set,
siginfo_t *info );
int SignalWaitinfo_r( const sigset_t *set,
siginfo_t *info );

Аргументы:

set
Указатель на объект sigset_t, определяющий сигналы, которые необходимо ожидать.
info
NULL или указатель на структуру siginfo_t, в которой функция может хранить информацию об извлеченном из очереди сигнале.

Библиотека:

libc

Описание:

Системные вызовы SignalWaitinfo() и SignalWaitinfo_r() выбирают ожидающий в очереди сигнал согласно указанной маске set. Если во время вызова нет подходящих ожидающих сигналов, поток блокируется до тех пор, пока один или несколько сигналов в set не станут поступят или пока поток не будет прерван незаблокированным сигналом.

Данные функции идентичны за исключением способа возврата ошибок.


Note: Вместо прямого использования данных системных вызовов следует рассмотреть возможность вызова sigwaitinfo().

Если аргумент info не равен NULL, информация о выбранном сигнале хранится в нем следующим образом:

Поле структуры siginfo_t Описание
si_signo Номер выбранного сигнала
si_code Код сигнала
si_value Значение сигнала

Если во время ожидания SignalWaitinfo() возникает сигнал, который не блокируется, вызывается обработчик сигнала и SignalWaitinfo() прерывается с ошибкой EINTR.

Состояния блокировки:

STATE_SIGWAITINFO
Вызывающий поток блокируется в ожидании сигнала.

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

SignalWaitinfo()
Номер сигнала. Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.
SignalWaitinfo_r()
Номер сигнала. Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.

Коды ошибок:

EINTR
Вызов был прерван сигналом.
EFAULT
Произошла ошибка при попытке ядра получить доступ к предоставленным буферам.
ETIMEDOUT
Тайм-аут ядра разблокировал вызов (см. TimerTimeout()).

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

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

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

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

siginfo_t, SignalKill(), SignalKill_r(), sigwaitinfo()




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