[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Остановка до сигнала - Пример
Этот пример показывает, как останавливаться, ожидая прибытия сигнала,
с использованием sigpause(2). В функции обработки сигнала внешняя
переменная flag увеличивается на единицу. Перед проверкой flag
вызывается sighold(2). Если flag равен нулю, не было перехвачено ни
одного сигнала SIGINT, и программа засыпает в ожидании сигналов,
используя sigpause(2). Когда сигнал прибывает, программа просыпается и
исполняет функцию обработки. Если сигнал прибудет до проверки flag, то
sigpause() не будет вызвана. Наконец, переменная flag обнуляется, и
задержанные сигналы освобождаются. Заметьте, что sigpause(2)
автоматически освобождает заданный сигнал, если он прибыл, но был
задержан.
Файл: sigpause1.c
ОСТАНОВКА ДО СИГНАЛА - ПРИМЕР
1 #include <signal.h>
2
3 int flag;
4
5 main()
6 {
7 void sigcatch();
8
9 sigset(SIGINT, sigcatch);
10 sigset(SIGQUIT, sigcatch);
11 while (1) {
12 /*
13 * processing here
14 */
15 sleep(3);
16
17 sighold(SIGINT);
18 if (flag == 0) {
19 printf("pausing for SIGINT\n");
20 sigpause(SIGINT);
21 }
22 flag = 0;
23 sigrelse(SIGINT);
24 }
25 }
26
27
28 void sigcatch(sig)
29 int sig;
30 {
31 printf("entering sigcatch()\n");
32 if (sig == SIGQUIT)
33 exit(1);
34 flag++;
35 }