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