Меню
Главная
Случайная статья
Настройки
|
signal.h — заголовочный файл, определенный в стандартной библиотеке языка Си, для указания того, как программа обрабатывает сигналы во время её выполнения. Сигнал может быть как синхронным с помощью вызова raise() , так и асинхронным.
Каждая реализация определяет какой сигнал что генерирует и определяет их генерацию.
Эта часть библиотеки используется для перехвата сигналов — назначения обработчика определённого сигнала.
Обработчик сигнала может вызывать только следующие функции: _exit() , _Exit() , abort() , raise() (только если обработчик не вызван функциями abort или raise). Вызов прочих библиотечных функций приводит к неопределённому поведению, хотя отдельными реализациями такие вызовы могут быть разрешены, например в posix есть список async-signal-safe функций.
Содержание
Типы данных
Стандарт объявляет тип данных 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
|
Примечания
- 1 2 3 4 ISO/IEC 9899:TC3 7.14 (неопр.). Дата обращения: 29 декабря 2011. Архивировано 11 января 2018 года.
Ссылки
|
|