#include <stdio.h>
#include <signal.h>
#include <setjmp.h>
jmp_buf buf;
void
handler(int sig)
{
if (sig == SIGINT) printf("Now got a SIGINT signal\n");
longjmp(buf, 1);
/* can't get here */
}
int
main(void)
{
signal(SIGINT, handler);
if (setjmp(buf)) {
printf("back in main\n");
return 0;
} else
printf("first time through\n");
loop:
/* spin here, waiting for ctrl-c */
goto loop;
}
注意:系統並不支持在信號處理程序內部調用庫函數(除非嚴格符合標准所限制的
條件)。這裡只是為了演示方便,實際代碼中不能這樣使用:-)