以下有一些是我网上搜索到的,觉得写的还行,记录下来以供以后查阅。
void longjmp(jmp_buf env, int val); void siglongjmp(sigjmp_buf env, int val);
有一点我发现没有人说到,就是这个val,其实它是一个返回值给跳转后的setjmp指令。 但是默认返回值0 是用作第一次做记号,所以如果设置为0,页会返回1作为代替。
相关函数:longjmp, siglongjmp, setjmp
表头文件:#include <setjmp.h>
函数定义:int sigsetjmp(sigjmp_buf env, int savesigs)
函数说明:sigsetjmp()会保存目前堆栈环境,然后将目前的地址作一个记号,而在程序其他地方调用siglongjmp()时便会直接跳到这个记号位置,然后还原堆栈,继续程序好执行。
参数env为用来保存目前堆栈环境,一般声明为全局变量
参数savesigs若为非0则代表搁置的信号集合也会一块保存
当sigsetjmp()返回0时代表已经做好记号上,若返回非0则代表由siglongjmp()跳转回来。
返回值 :返回0代表局促存好目前的堆栈环境,随时可供siglongjmp()调用, 若返回非0值则代表由siglongjmp()返回
附加说明:setjmp()和sigsetjmp()会令程序不易令人理解,请尽量不要使用
Linux的异常处理
问题描述:
分析:
1. 搞清楚Linux的信号处理流程:
2. 分析异常处理函数没有被调用的原因:
3. 该问题的解决办法: