sigtimedwait()

Ожидать сигнал до истечения времени

Прототип:

#include <signal.h>
int sigtimedwait( const sigset_t *set,
siginfo_t *info,
const struct timespec *timeout );

Аргументы:

set
Набор сигналов, которые необходимо дождаться.
info
NULL или указатель на структуру siginfo_t, где функция сохранит информацию о сигнале.
timeout
NULL или указатель на структуру struct timespec, определяющую максимальное время ожидания.

Библиотека:

libc

Описание:

Функция sigtimedwait() выбирает ожидающий сигнал из набора set, автоматически очищает его из набора ожидающих сигналов процесса и возвращает его номер.

Если не NULL, sigtimedwait() сохраняет сигнал в поле si_signo структуры info и причину сигнала в поле si_code.

Если в очереди присутствует значение для выбранного сигнала, извлекается первое из них и если info не равен NULL, значение сохраняется в поле si_value структуры info. Системные ресурсы, использованные для сохранения сигнала в очереди, освобождаются для переиспользования. Если с поступившим сигналом не ассоциировано значение, значение поля si_value не определено.

Если больше сигналов указанного вида не буферизировано в очереди, индикация о поступивших сигналах очищается.

Если сигналы, удовлетворяющие set, не поступили, sigtimedwait() выдерживает ожидание, но не более чем struct timespec. Часы CLOCK_MONOTONIC используются для выдерживания задержки.

Если timeout равен нулю, и ни один из указанных сигналов не поступил, sigtimedwait() немедленно возвращается с ошибкой. Если timeout равен NULL, вызов sigtimedwait() аналогичен sigwaitinfo().

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

Выбранный номер сигнала. Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EAGAIN
timeout истек до поступления сигнала, перечисленного в set или все таймеры ядра уже используются.
EFAULT
При обращении к буферу возникла ошибка.
EINTR
Ожидание было прервано незаблокированным поступившим сигналом.
EINVAL
Аргумент timeout в части значения поля tv_nsec меньше нуля, либо больше или равно 1000 миллионам; set содержит некорректный или неподдерживаемый номер сигнала.

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

POSIX 1003.1 RTS

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

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

siginfo_t, pause(), pthread_sigmask(), sigaction(), SignalWaitinfo(), sigpending(), sigsuspend(), sigwaitinfo(), struct timespec




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