- signal.h
-
Стандартная библиотека
языка программирования Сsignal.h — заголовочный файл, определенный в стандартной библиотеке языка Си, для указания того, как программа обрабатывает сигналы во время ее выполнения. Сигнал может быть как синхронным с помощью вызова
raise()
, так и асинхронным.Каждая реализация определяет какой сигнал что генерирует и определяет их генерацию.
Эта часть библиотеки используется для перехвата сигналов — назначении обработчика определённого сигнала.
Обработчик сигнала может вызывать только следующие функции:
exit()
,_Exit()
,abort()
,raise()
(только если обработчик не вызван функциями abort или raise). Вызов прочих библиотечных функций приводит к неопределённому поведению, хотя отдельными реализациями такие вызовы могут быть разрешены.Содержание
Типы данных
Стандарт объявляет тип данных
sig_atomic_t
, доступ к которому является атомарным, даже при наличии асинхронных прерываний.[1]Макросы
Стандарт объявляет макросы
SIG_DFL
,SIG_ERR
,SIG_IGN
, которые используются как аргументы и возвращаемое значение для функцииsignal()
.[1] Макрос SIG_DFL используется для установки поведения по умолчанию для выбранного сигнала, SIG_IGN — для игнорирования сигнала, а SIG_ERR — как возвращаемое значение, свидетельствующее об ошибке.Кроме того, стандарт определяет следующие типы сигналов:[1]
Константа Значение SIGINT Получение интерактивного сигнала SIGILL Недопустимая инструкция SIGABRT Ненормальное завершение программы, которое может быть вызвано abort()
SIGFPE Ошибочная арифметическая операция, такая как деление на ноль или переполнение SIGSEGV Ошибочное обращение к объекту в памяти SIGTERM Запрос на прекращение выполнения и разрешает другие, зависящие от платформы. При запуске программы часть сигналов может игнорироваться, для другой части определяется поведение по умолчанию.
Функции
Стандарт объявляет следующие функции:
#include <signal.h> void (*signal(int sig, void (*func)(int)))(int); int raise(int sig);
Функция
signal
устанавливает обработчикfunc
для сигналаsig
. В качестве аргументаfunc
может приниматьSIG_IGN
иSIG_DFL
. В случае успеха функция возвращает старый обработчик сигнала, в противном случае —SIG_ERR
.Если обработчик возвращает управление при типе сигнала
SIGILL
,SIGFPE
,SIGSEGV
или иных, связанных с ошибками выполнения, поведение программы не определено. Кроме того, обработчик если был вызван не с помощью abort или raise, может изменять переменные только типаvolatile sig_atomic_t
.Функция
raise
генерирует сигналsig
.[1]Методы
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 может завершиться выполнением операции возврата или вызовом функций самозавершения, выхода или перехода.
Члены-константы
Константа Значение Стандарты 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 Примечания
Ссылки
signal.h
— основные определения, The Single UNIX® Specification, выпуск 7 от The Open Group (англ.)- Руководство от dinkumware по signal.h
- Руководство от XGC по signal.h
Категория:- Стандартные библиотечные заголовки языка Си
Wikimedia Foundation. 2010.