[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Установка реакции на сигнал - Пример (улучшенный)

Этот  пример   показывает,  как  использовать  sigset(2),  и  является
улучшением primes2.c,  приведенного ранее  в этом  разделе. Реакция на
сигнал устанавливается  на функцию  обработки только один раз, вызовом
sigset(2). Каждый  раз, когда  прибывает сигнал    SIGINT,  вызывается
sigcatch().

Перед вызовом  sigcatch() ядро  автоматически  устанавливает  задержку
сигналов SIGINT.  После этого,  когда sigcatch  возвращает управление,
ядро сбрасывает  реакцию к  тому значению,  которое она  имела раньше.
Поэтому, когда  sigcatch()  исполняется,  прибывающие  сигналы  SIGINT
задерживаются до  тех пор,  пока sigcatch()  не завершится.  Следующий
SIGINT заставит sigcatch() вызваться еще один раз.

Файл: primes3.c
          УСТАНОВКА РЕАКЦИИ НА СИГНАЛ - ПРИМЕР (УЛУЧШЕННЫЙ)

 1         #include <stdio.h>
 2         #include <signal.h>
 3         #define   OUTPUT   "Primes"
 4         #define   MAXNUM   10000
 5         int count;
 6         FILE *fptr;
 7
 8         main()
 9         {
10         int number, divisor;
11         void sigcatch();
12
13         fptr = fopen(OUTPUT, "w");
14         sigset(SIGINT, sigcatch);
15         sigset(SIGQUIT, sigcatch);
 ...
26         }
27
28         void sigcatch(sig)
29         int sig;
30         {
31         printf("%d primes computed\n", count);
32         if (sig == SIGQUIT) {
33         fclose(fptr);
34         exit(1);
35         }
36         }