C/signal.h — различия между версиями
Admin (обсуждение | вклад) м (1 версия: Импорт контента...) |
Admin (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | * [[C/signal.h/raise | raise]] | + | {{C Standard library}} |
+ | |||
+ | '''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 | ||
+ | |} |
Текущая версия на 12:36, 22 июня 2010
C | |||
---|---|---|---|
Константа | Значение | Стандарты | |
---|---|---|---|
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 |