下面这个程序使用setjmp/longjmp和信号处理。这样,程序在收到一个ctrl-c时 将重新启动,而不是退出。#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; } 注意:系统并不支持在信号处理程序内部调用库函数(除非严格符合标准所限制的 条件)。这里只是为了演示方便,实际代码中不能这样使用:-) |