[<<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 }