Функции библиотеки C -signal()
Стандартная библиотека C - <signal.h>
Описание
Функции библиотеки Cvoid (*signal(int sig, void (*func)(int)))(int)Устанавливает функцию для обработки сигнала, т. е. сsigОбработчик сигнала для параметра.
signalЭта функция входит в стандартную библиотеку C и используется для настройки обработчиков сигналов. Она определена в<signal.h>В заголовочном файле.signalФункция позволяет программе определить, когда некоторые сигналы (такие какSIGINT, генерируемые нажатием Ctrl+C), поступают, обработчик, который должен быть выполнен.
Объявление
Ниже приведено объявление функции signal().
void (*signal(int sig, void (*func)(int)))(int);
Параметр
- sig-- Код сигнала, используемый как переменная в обработчике сигналов. Ниже приведены некоторые важные стандартные константы сигналов:
| Макрос | signal |
|---|---|
| SIGABRT | (Сигнал Abort) Программа аварийно завершилась. |
| SIGFPE | (Сигнал исключения с плавающей запятой) Ошибка арифметической операции, например делитель равен 0 или переполнение (не обязательно операция с плавающей запятой). |
| SIGILL | (Сигнал Illegal Instruction) Недопустимый образ функции, например недопустимая инструкция, обычно вызванная вариантом в коде или попыткой выполнить данные. |
| SIGINT | (Сигнал прерывания) Сигнал прерывания, например ctrl-C, обычно генерируемый пользователем. |
| SIGSEGV | (Сигнал Segmentation Violation) Недопустимый доступ к памяти, например доступ к несуществующей ячейке памяти. |
| SIGTERM | (Сигнал Terminate) Сигнал запроса завершения, отправленный этой программе. |
- func-- Указатель на функцию. Это может быть функция, определённая программой, или одна из следующих предопределённых функций:
| SIG_DFL | Обработчик сигнала по умолчанию. |
| SIG_IGN | Игнорировать сигнал. |
Возвращаемое значение
Эта функция возвращает предыдущее значение обработчика сигнала; при возникновении ошибки она возвращает SIG_ERR.
Пример
В следующем примере демонстрируется использование функции signal().
Пример
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
void sighandler(int);
int main()
{
signal(SIGINT, sighandler);
while(1)
{
printf(Начинаем спать одну секунду...\n");
sleep(1);
}
return(0);
}
void sighandler(int signum)
{
printf(Пойман сигнал %d, выходим...\n", signum);
exit(1);
}
Давайте скомпилируем и запустим вышеприведённую программу, которая выдаст следующие результаты, и программа войдёт в бесконечный цикл, для выхода из которого потребуется использовать CTRL + C.
开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 捕获信号 2,跳出...Другие расширения