#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;
}
注意:系统并不支持在信号处理程序内部调用库函数(除非严格符合标准所限制的
条件)。这里只是为了演示方便,实际代码中不能这样使用:-)