Функции библиотеки 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 <stdio.h>
#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,跳出...

Стандартная библиотека C - <signal.h>

Другие расширения