setjmp/longjmp
来源:互联网 发布:黛堡嘉莱价格淘宝 编辑:程序博客网 时间:2024/06/10 18:28
goto是局部跳转,只能在一个函数内实施的跳转。
setjmp与longjmp是非局部跳转
#include <setjmp.h>int setjmp(jmp_buf env);void longjmp(jmp_buf env, int val);
在希望返回的位置上调用setjmp,当在可能出现错误的位置上调用longjmp,函数返回就好像又回到了setjmp返回的地方。
static jmp_buf jmpbuf; static void sig_quit(int signo) { longjmp(jmpbuf, 1); }int main(){ socket s; singal(SIGIO, sig_quit); ... bind(s); ... if(setjmp(jmpbuf)) { exit(0); } socket ns = accept();//即使堵在此也不怕了 ...}
第一次setjmp会返回0,而当SIGIO打断程序跳出accept之后,进入信号处理函数,里面调用longjmp,这时又回到了setjmp的地方,不过这时候setjmp返回的是1,返回的值是longjmp的第二个参数的值。
0 0
- setjmp longjmp
- setjmp()/longjmp()
- setjmp longjmp
- setjmp longjmp
- setjmp longjmp
- setjmp/longjmp
- setjmp/longjmp
- setjmp&longjmp
- setjmp\longjmp
- setjmp longjmp
- setjmp & longjmp
- setjmp&longjmp
- setjmp/longjmp
- setjmp longjmp
- setjmp/longjmp
- setjmp.h setjmp/longjmp
- setjmp()和longjmp()
- setjmp和longjmp函数
- hdu4971A simple brute force problem.【最大权闭合图】
- mybaits 一对多 关联查询
- (枚举)算法竞赛入门经典(7.1.3)分数拆分
- yum方式完成LAMP环境搭建
- pjsip编译
- setjmp/longjmp
- 【Streaming】为什么提交任务后,worker不断重启,任务部署总是不成功?
- 关于C# byte[]与struct的转换
- 视频剪切软件BandiCut
- 第一个swift程序
- 关于QEMU中的类型算法
- Emacs中文识别以及中文输入法的相关问题
- UVA 10635 Prince and Princess lcs--》lis
- c#中关于结构体和字节数组转化