Signal.h
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 года.
Ссылки
signal.h— основные определения, The Single UNIX® Specification, выпуск 7 от The Open Group (англ.)- Руководство от dinkumware по signal.h
- Руководство от XGC по signal.h
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.