C/signal.h — различия между версиями

Материал из C\C++ эксперт
Перейти к: навигация, поиск
Строка 1: Строка 1:
* [[C/signal.h/raise | raise]]
+
'''signal.h''' — заголовочный файл, определенный в стандартной библиотеке языка Си, для указания того, как программа обрабатывает сигналы во время ее выполнения. Сигнал может оповещать о некотором отклонении от ожидаемого поведения программы (как например, деление на нуль) или о некоторых асинхронных событиях, произошедших вне программы (например, если кто-то нажал кнопку прерывания программы на клавиатуре).
 +
 
 +
Сигнал может генерироваться при вызове raise (посылает сигнал текущему процессу) или kill (посылает сигнал любому процессу). Каждая реализация определяет какой сигнал что генерирует и определяет их генерацию. реализация может определять сигналы, отличающиеся от перечисленных здесь. Стандартный заголовочный файл <signal.h> может определять дополнительные макросы с именами, начинающимися с SIG, для указания значения этих дополнительных сигналов. Все подобные значения являются целыми константными выражениями >= 0.
 +
 
 +
Можно указывать обработчик сигнала для всех сигналов кроме двух (SIGKILL и SIGSTOP не могут быть перехвачены, блокированы или проигнорированы). Обработчик сигнала — функция, направляющая вызовы окружению, когда принимает соответствующий сигнал. Целевое окружение приостанавливает выполнение программы пока обработчик сигнала не возвратит значение или вызовет переход (longjmp). Для максимальной переносимости, асинхронный обработчик сигнала должен:
 +
 
 +
совершать (успешный) вызов сигнала функции
 +
присваивать значения объектам с типом несвязанная переменная sig_atomic_t
 +
возвращать управление обратно вызвавшему его
 +
Если сигнал оповещает об ошибке внутри программы (а сигнал не асинхронный), то обработчик сигнала может завершить ее выполнение, вызвав abort, exit или longjmp.
 +
 
 +
 
 +
== Методы ==
 +
* [[C/signal.h/raise | raise]]. Искусственно вызывает сигнал.
 +
 
 +
* [[C/signal.h/psignal | psignal]], выводит в stderr строку, содержащую номер сигнала. Применяется в 4.3BSD, Solaris и Linux, но не указан в POSIX и SUS. На тех же системах [[C/string.h | string.h]] содержит нестандартный strsignal, который работает аналогично strerror.
 +
 
 +
* [[C/signal.h/signal | signal]] - назначает действие, предпринимаемое при получении программой сигнала sig. Если значение func равно SIG_DFL, то происходит обработка по умолчанию для указанного сигнала. Если значение func равно SIG_IGN, то сигнал игнорируется. В остальных случаях func указывает на вызываемую функцию ''обработчик сигнала'' при получении сигнала.
 +
 
 +
Функция func может завершиться выполнением операции возврата или вызовом функций самозавершения, выхода или перехода.
 +
 
 +
== Члены-типы ==
 +
typedef i-type sig_atomic_t
 +
 
 +
== Члены-макросы ==
 +
* SIG_DFL — Используется для указания способа обработки сигнала по умолчанию.
 +
* SIG_IGN — Используется для игнорирования сигнала.
 +
* SIG_ERR — Код ошибки.
 +
 
 +
== Члены-константы ==
 +
{|
 +
|-
 +
!Константа !!Значение !! Стандарты
 +
|-
 +
|[[C/signal.h/SIGHUP | SIGHUP]] ||Отбой ||POSIX||
 +
|-
 +
|[[C/signal.h/SIGINT | SIGINT]] ||Прерывание ||ANSI
 +
|-
 +
|[[C/signal.h/SIGQUIT | SIGQUIT]] ||Выход ||POSIX
 +
|-
 +
|[[C/signal.h/SIGILL | SIGILL]] ||Недопустимая инструкция ||ANSI
 +
|-
 +
|[[C/signal.h/SIGABRT | SIGABRT]] ||Самоостановка ||ANSI
 +
|-
 +
|[[C/signal.h/SIGTRAP | SIGTRAP]] ||Перехват события ||POSIX
 +
|-
 +
|[[C/signal.h/SIGABRT | SIGIOT]] ||Перехват ввода-вывода ||4.2 BSD
 +
|-
 +
|[[C/signal.h/SIGEMT | SIGEMT]] ||Перехват эмуляции ||4.2 BSD
 +
|-
 +
|[[C/signal.h/SIGFPE | SIGFPE]] ||Исключение с плавающей запятой ||ANSI
 +
|-
 +
|[[C/signal.h/SIGKILL | SIGKILL]] ||Неперехватываемый сигнал завершения ||POSIX
 +
|-
 +
|[[C/signal.h/SIGBUS | SIGBUS]] ||Ошибка шины ||4.2 BSD
 +
|-
 +
|[[C/signal.h/SIGSEGV | SIGSEGV]] ||Нарушение сегментации ||ANSI
 +
|-
 +
|[[C/signal.h/SIGSYS | SIGSYS]] ||Неправильный аргумент в системный вызов ||4.2 BSD
 +
|-
 +
|[[C/signal.h/SIGPIPE | SIGPIPE]] ||Нарушение канала ||POSIX
 +
|-
 +
|[[C/signal.h/SIGALRM | SIGALRM]] ||Истечение времени ||POSIX
 +
|-
 +
|[[C/signal.h/SIGTERM | SIGTERM]] ||Завершение ||ANSI
 +
|-
 +
|[[C/signal.h/SIGUSR1 | SIGUSR1]] ||Пользовательский сигнал 1 ||POSIX
 +
|-
 +
|[[C/signal.h/SIGUSR2 | SIGUSR2]] ||Пользовательский сигнал 2 ||POSIX
 +
|-
 +
|[[C/signal.h/SIGCHLD | SIGCHLD]] ||Изменение статуса дочернего процесса ||POSIX
 +
|-
 +
|[[C/signal.h/SIGCHLD | SIGCLD]] ||Аналогично SIGCHLD ||System V
 +
|-
 +
|[[C/signal.h/SIGPWR | SIGPWR]] ||Перезапуск после проблемы с питанием ||System V
 +
|-
 +
|[[C/signal.h/SIGXCPU | SIGXCPU]] ||Ограничение процессорного времени ||POSIX
 +
|}

Версия 21:54, 21 июня 2010

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