/* signal.c * Taken from [Jumpstart] * * Ilustrates the use of setjmp in signaling. * */ #include #include #include jmp_buf env; void int_handler(int sig) { //sigset(SIGINT, int_handler); signal(SIGINT, int_handler); printf("SIGINT signal=%d\n",sig); siglongjmp(env,1); } void quit_handler(int sig) { signal(SIGQUIT, int_handler); printf("SIGQUIT signal=%d\n",sig); siglongjmp(env,1); } main() { int i, k = 0; char buf[BUFSIZ]; signal(SIGINT, int_handler); printf("SIGINT=%d\n",SIGINT); if (sigsetjmp(env,1) != 0){ printf("restarted...\n"); k=0; } for (i=0; ((i<20)&&(k<20)) ; i++) {//main loop printf("%d> ", ++k); gets(buf); printf("%s\n", buf); } }