[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Перехват сигнала - пример
Программа в этом примере вычисляет простые числа от 1 до MAXNUM. Эта
программа требует много времени для выполнения. Вы можете убить эту
программу в любой момент нажатием клавиши DELETE. Вместо того, чтобы
просто завершиться, программа перехватывает SIGINT и исполняет
функцию, которая показывает количество вычисленных к данному моменту
простых чисел, закрывает выходной файл и завершается.
12 Функция обработки сигнала объявлена, потому что ее имя
будет использовано системным вызовом signal(2).
15 Вызывается signal(2), теперь при получении сигнала SIGINT
будет вызвана функция sigcatch(). Заметьте, что если сигнал
никогда не будет получен, sigcatch() никогда не будет
вызвана.
... Полный листинг программы приведен в конце раздела. Код,
который не показан, выполняет собственно вычисление
простых чисел.
29-34 Эта функция обработки сигнала будет вызвана, когда будет
перехвачен сигнал SIGINT. Функция выводит сообщение,
закрывает выходной файл и завершает программу.
Если бы exit(2) не был вызван в функции обработки сигнала, исполнение
возобновилось бы с того места, где оно остановилось внутри main(2).
Однако, второй полученный SIGINT прервал бы эту программу, потому что
реакция на сигнал была бы установлена ядром в SIG_DFL.
Файл: primes1.c
ПЕРЕХВАТ СИГНАЛА - ПРИМЕР
1 #include <stdio.h>
2 #include <signal.h>
3 #define OUTPUT "Primes"
4 #define MAXNUM 10000
5
6 int count;
7 FILE *fptr;
8
9 main()
10 {
11 int number, divisor;
12 void sigcatch();
13
14 fptr = fopen(OUTPUT, "w");
15 signal(SIGINT, sigcatch);
...
25 fclose(fptr);
26 }
27
28
29 void sigcatch()
30 {
31 printf("%d primes computed\n", count);
32 fclose(fptr);
33 exit(1);
34 }