[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Задержка и освобождение сигнала - Образец

Этот  образец   кода  показывает,  как  задерживать  сигнал  во  время
исполнения критической  секции кода.  Бывают ситуации, когда прибывший
сигнал  может   влиять  на  правильность  исполнения  программы,  если
возникнет  в   неправильном  месте   кода.  Одно   решение  состоит  в
игнорировании сигналов в этой критической секции, но при использовании
такого метода сигналы могут быть потеряны.

Более удачный метод состоит в том, чтобы задержать сигналы до момента,
когда  программа   будет  готова   прореагировать  на   сигнал.  Вызов
sighold(2) должен  стоять перед  входом в критический участок, а вызов
sigrelse(2) должен быть сделан после выхода из него.

Файл: sighold1.c
              ЗАДЕРЖКА И ОСВОБОЖДЕНИЕ СИГНАЛА - ОБРАЗЕЦ


 1        #include <signal.h>
 2
 3        main()
 4        {
 5        void (*istat)(int), sigcatch(int);
 6
 7        istat = sigset(SIGINT, sigcatch);
 8
 9        while(1) {
10        /*
11         * processing loop ...
12         */
13
14        sighold(SIGINT);
15        /*
16         * critical section of code ...
17         */
18        sigrelse(SIGINT);
19        }
20        sigset(SIGINT, istat);
21        }
22
23
24        void sigcatch(int sig)
25        {
26        /*
27         * signal catching routine here
28         */
29        }