#include <setjmp.h>
int setjmp(jmp_buf env);
void longjmp(jmpbuf env, int retval);
setjmp在env中缓存当前栈的内容,以供后面longjmp使用,并返回0。
longjmp从env中恢复栈的内容,然后触发一个从最近一次初始化env的setjmp调用的返回.
然后setjmp返回,并带有非0的返回值retval.
int sigsetjmp(sigjmp_buf env, int savesigs);
void siglongjmp(sigjmp_buf env, int retval);
这两个函数使信号处理程序转移到一个特殊的代码位置,而不是返回到被信号到达中断了的指令的位置。