diff --git a/c_expert/chapter7/jmp_restore.c b/c_expert/chapter7/jmp_restore.c new file mode 100644 index 0000000..998e081 --- /dev/null +++ b/c_expert/chapter7/jmp_restore.c @@ -0,0 +1,30 @@ +#include +#include +#include + +jmp_buf buf; + +void handler(int s) +{ + if (s == SIGINT) printf("now got a SIGINT signal\n"); + longjmp(buf, 1); + /* 没有到达 */ +} + +int main(void) +{ + + signal(SIGINT, handler); + if (setjmp(buf)) + { + printf("back in main \n"); + return 0; + } + else + { + printf("first time through\n"); + } + loop: + goto loop; + return 0; +}