4.3 использование надежных сигналов.При получении сигнала SIGINT четырежды вызывается установленный обработчик, а в пятый раз происходит обработка по умолчанию. #include <signal.h> #include <stdlib.h> #include <stdio.h>
int count = 1; struct sigaction action, sa;
void SigHandler(int s) { printf(" I got SIGINT \%d time(s) ", count++); if (count == 5) { action.sa_handler = SIG_DFL; /* изменяем указатель на функцию-обработчик сигнала */ sigaction(SIGINT, &action, &sa); /* изменяем обработчик для сигнала SIGINT */ } }
int main(int argc, char **argv) { sigset_t sigset; sigemptyset(&sigset); /* инициализируем набор сигналов */ sigaddset(&sigset, SIGINT); /*добавляем в набор сигналов бит, соответствующий сигналу SIGINT*/ if (sigprocmask(SIG_UNBLOCK, &sigset, NULL) == -1) /*устанавливаем новую сигнальную маску*/ { printf(“sigprocmask() error ”); return -1; } action.sa_handler = SigHandler; /* инициализируем указатель на функцию-обработчик сигнала*/ sigaction(SIGINT, &action, &sa); /* изменяем обработчик по умолчанию для сигнала SIGINT */ while(1); /* бесконечный цикл */ return 0; } |
|