- Signal.h
-
signal.h
Стандартная библиотека
языка программирования Сsignal.h — заголовочный файл, определенный в стандартной библиотеке языка Си, для указания того, как программа обрабатывает сигналы во время ее выполнения. Сигнал может оповещать о некотором отклонении от ожидаемого поведения программы (как например, деление на нуль) или о некоторых асинхронных событиях, произошедших вне программы (например, если кто-то нажал кнопку прерывания программы на клавиатуре).
Сигнал может генерироваться при вызове
raise
(посылает сигнал текущему процессу) илиkill
(посылает сигнал любому процессу). Каждая реализация определяет какой сигнал что генерирует и определяет их генерацию. реализация может определять сигналы, отличающиеся от перечисленных здесь. Стандартный заголовочный файл <signal.h> может определять дополнительные макросы с именами, начинающимися с SIG, для указания значения этих дополнительных сигналов. Все подобные значения являются целыми константными выражениями >= 0.Можно указывать обработчик сигнала для всех сигналов кроме двух (SIGKILL и SIGSTOP не могут быть перехвачены, блокированы или проигнорированы). Обработчик сигнала — функция, направляющая вызовы окружению, когда принимает соответствующий сигнал. Целевое окружение приостанавливает выполнение программы пока обработчик сигнала не возвратит значение или вызовет переход (longjmp). Для максимальной переносимости, асинхронный обработчик сигнала должен:
- совершать (успешный) вызов сигнала функции
- присваивать значения объектам с типом несвязанная переменная
sig_atomic_t
- возвращать управление обратно вызвавшему его
Если сигнал оповещает об ошибке внутри программы (а сигнал не асинхронный), то обработчик сигнала может завершить ее выполнение, вызвав
abort
,exit
илиlongjmp
.Содержание
Методы
int raise(int sig)
. Искусственно вызывает сигнал.
psignal(int sig, const char *s)
, выводит в stderr строку, содержащую номер сигнала. Применяется в 4.3BSD, Solaris и Linux, но не указан в POSIX и SUS.
На тех же системах string.h содержит нестандартный
strsignal(int sig)
, который работает аналогично strerror.void* signal(int sig, void (*func)(int))
назначает действие, предпринимаемое при получении программой сигналаsig
. Если значение func равно SIG_DFL, то происходит обработка по умолчанию для указанного сигнала. Если значение func равно SIG_IGN, то сигнал игнорируется. В остальных случаях func указывает на вызываемую функцию обработчик сигнала при получении сигнала.
Функция func может завершиться выполнением операции возврата или вызовом функций самозавершения, выхода или перехода.
Члены-типы
typedef i-type sig_atomic_t
Члены-макросы
- SIG_DFL — Используется для указания способа обработки сигнала по умолчанию.
- SIG_IGN — Используется для игнорирования сигнала.
- SIG_ERR — Код ошибки.
Члены-константы
Константа Значение Стандарты SIGHUP Отбой POSIX SIGINT Прерывание ANSI SIGQUIT Выход POSIX SIGILL Недопустимая инструкция ANSI SIGABRT Самоостановка ANSI SIGTRAP Перехват события POSIX SIGIOT Перехват ввода-вывода 4.2 BSD SIGEMT Перехват эмуляции 4.2 BSD SIGFPE Исключение с плавающей запятой ANSI SIGKILL Неперехватываемый сигнал завершения POSIX SIGBUS Ошибка шины 4.2 BSD SIGSEGV Нарушение сегментации ANSI SIGSYS Неправильный аргумент в системный вызов 4.2 BSD SIGPIPE Нарушение канала POSIX SIGALRM Истечение времени POSIX SIGTERM Завершение ANSI SIGUSR1 Пользовательский сигнал 1 POSIX SIGUSR2 Пользовательский сигнал 2 POSIX SIGCHLD Изменение статуса дочернего процесса POSIX SIGCLD Аналогично SIGCHLD System V SIGPWR Перезапуск после проблемы с питанием System V SIGXCPU Ограничение процессорного времени POSIX Ссылки
- The Single UNIX® Specification, выпуск 7 от The Open Group (англ.) — основные определения,
- Руководство от dinkumware по signal.h
- Руководство от XGC по signal.h
Wikimedia Foundation. 2010.