Функции библиотеки C -raise()
Стандартная библиотека C - <signal.h>
Описание
Функции библиотеки Cint raise(int sig)Вызовет генерацию сигналаsig。sigПараметр совместим с макросами SIG.
raiseЭта функция входит в стандартную библиотеку C и используется для отправки сигналов текущему процессу. Она определена в<signal.h>заголовочном файле и позволяет программе отправлять сигналы самой себе для вызова соответствующего обработчика сигналов.
Объявление
Ниже приведено объявление функции raise().
int raise(int sig)
Параметр
- sig-- Код сигнала для отправки. Ниже приведены некоторые важные стандартные константы сигналов:
| Макрос | signal |
|---|---|
| SIGABRT | (Сигнал Abort) Программа завершилась аварийно. |
| SIGFPE | (Сигнал Floating-Point Exception) Возникла ошибка арифметической операции, например деление на ноль или переполнение (не обязательно операция с плавающей точкой). |
| SIGILL | (Сигнал Illegal Instruction) Недопустимый образ функции, например недопустимая инструкция, обычно вызванная вариантом в коде или попыткой выполнить данные. |
| SIGINT | (Сигнал Interrupt) Сигнал прерывания, например Ctrl-C, обычно генерируемый пользователем. |
| SIGSEGV | (Сигнал Segmentation Violation) Недопустимый доступ к памяти, например доступ к несуществующей ячейке памяти. |
| SIGTERM | (Сигнал Terminate) Сигнал запроса завершения, отправленный этой программе. |
Возвращаемое значение
В случае успеха функция возвращает ноль; в противном случае она возвращает ненулевое значение.
Пример
В следующем примере демонстрируется использование функции raise().
Пример
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
void signal_catchfunc(int);
int main() {
int ret;
signal(SIGINT, signal_catchfunc);
printf("Начинаем генерацию сигнала\n");
ret = raise(SIGINT);
if (ret != 0) {
printf("Ошибка, невозможно сгенерировать сигнал SIGINT\n");
exit(0);
}
printf("Выход....\n");
return 0;
}
void signal_catchfunc(int signal) {
printf("Перехвачен сигнал\n");
}
#include<stdlib.h>
#include<signal.h>
void signal_catchfunc(int);
int main() {
int ret;
signal(SIGINT, signal_catchfunc);
printf("Начинаем генерацию сигнала\n");
ret = raise(SIGINT);
if (ret != 0) {
printf("Ошибка, невозможно сгенерировать сигнал SIGINT\n");
exit(0);
}
printf("Выход....\n");
return 0;
}
void signal_catchfunc(int signal) {
printf("Перехвачен сигнал\n");
}
Давайте скомпилируем и запустим приведённую выше программу, которая выдаст следующий результат:
Start generating a signal !! Signal Capture !! Exit...Другие расширения