Как правило, ожидаемый результат: он 5 раз перехватывает KeyboardInterrupt и выходит 6 раз (если 1-я строка handler () не закомментирована )
Теперь, если я тоже прокомментирую эту строку, тогда
также поведение программы не
изменить, хотя я использую
ненадежный API.
Поскольку я использовал функцию signal (), это ненадежный bcos после первого вызова обработчика (), тогда SIGINT будет иметь поведение по умолчанию, то есть выход из a.out ..
Программа все еще закрывается после 5 ^ C .. ПОЧЕМУ?
**
код работает даже без
восстановление обработчика (). ЗАЧЕМ?
**
/* ursig1.c */
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
static int count = 0;
void handler(int signo) {
// signal(SIGINT,handler);
/* Re-instate handler */
++count;
/* Increment count */
write(1,"Got SIGINT\n",11); /* Write message */
}
int
main(int argc,char **argv) {
signal(SIGINT,handler);
/* Register function */
while ( count < 5 ) {
puts("Waiting for SIGINT..");
sleep(4);
/* Snooze */
}
puts("End.");
return 0;
}