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

Материал из C\C++ эксперт
Перейти к: навигация, поиск
 
Строка 1: Строка 1:
 +
{{C Standard library}}
 +
 
'''signal.h''' — заголовочный файл, определенный в стандартной библиотеке языка Си, для указания того, как программа обрабатывает сигналы во время ее выполнения. Сигнал может оповещать о некотором отклонении от ожидаемого поведения программы (как например, деление на нуль) или о некоторых асинхронных событиях, произошедших вне программы (например, если кто-то нажал кнопку прерывания программы на клавиатуре).
 
'''signal.h''' — заголовочный файл, определенный в стандартной библиотеке языка Си, для указания того, как программа обрабатывает сигналы во время ее выполнения. Сигнал может оповещать о некотором отклонении от ожидаемого поведения программы (как например, деление на нуль) или о некоторых асинхронных событиях, произошедших вне программы (например, если кто-то нажал кнопку прерывания программы на клавиатуре).
  

Текущая версия на 15:36, 22 июня 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