Материал из C\C++ эксперт
|
|
Строка 1: |
Строка 1: |
| + | {{C Standard library}} |
| + | |
| '''signal.h''' — заголовочный файл, определенный в стандартной библиотеке языка Си, для указания того, как программа обрабатывает сигналы во время ее выполнения. Сигнал может оповещать о некотором отклонении от ожидаемого поведения программы (как например, деление на нуль) или о некоторых асинхронных событиях, произошедших вне программы (например, если кто-то нажал кнопку прерывания программы на клавиатуре). | | '''signal.h''' — заголовочный файл, определенный в стандартной библиотеке языка Си, для указания того, как программа обрабатывает сигналы во время ее выполнения. Сигнал может оповещать о некотором отклонении от ожидаемого поведения программы (как например, деление на нуль) или о некоторых асинхронных событиях, произошедших вне программы (например, если кто-то нажал кнопку прерывания программы на клавиатуре). |
| | | |
Текущая версия на 12:36, 22 июня 2010
C |
---|
|
signal.h — заголовочный файл, определенный в стандартной библиотеке языка Си, для указания того, как программа обрабатывает сигналы во время ее выполнения. Сигнал может оповещать о некотором отклонении от ожидаемого поведения программы (как например, деление на нуль) или о некоторых асинхронных событиях, произошедших вне программы (например, если кто-то нажал кнопку прерывания программы на клавиатуре).
Сигнал может генерироваться при вызове raise (посылает сигнал текущему процессу) или kill (посылает сигнал любому процессу). Каждая реализация определяет какой сигнал что генерирует и определяет их генерацию. реализация может определять сигналы, отличающиеся от перечисленных здесь. Стандартный заголовочный файл <signal.h> может определять дополнительные макросы с именами, начинающимися с SIG, для указания значения этих дополнительных сигналов. Все подобные значения являются целыми константными выражениями >= 0.
Можно указывать обработчик сигнала для всех сигналов кроме двух (SIGKILL и SIGSTOP не могут быть перехвачены, блокированы или проигнорированы). Обработчик сигнала — функция, направляющая вызовы окружению, когда принимает соответствующий сигнал. Целевое окружение приостанавливает выполнение программы пока обработчик сигнала не возвратит значение или вызовет переход (longjmp). Для максимальной переносимости, асинхронный обработчик сигнала должен:
совершать (успешный) вызов сигнала функции
присваивать значения объектам с типом несвязанная переменная sig_atomic_t
возвращать управление обратно вызвавшему его
Если сигнал оповещает об ошибке внутри программы (а сигнал не асинхронный), то обработчик сигнала может завершить ее выполнение, вызвав abort, exit или longjmp.
Методы
- raise. Искусственно вызывает сигнал.
- psignal, выводит в stderr строку, содержащую номер сигнала. Применяется в 4.3BSD, Solaris и Linux, но не указан в POSIX и SUS. На тех же системах string.h содержит нестандартный strsignal, который работает аналогично strerror.
- signal - назначает действие, предпринимаемое при получении программой сигнала 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
|