sigsetjmp函数
来源:互联网 发布:周小帅私房菜淘宝店 编辑:程序博客网 时间:2024/06/07 18:56
相关函数:longjmp, siglongjmp, setjmp
表头文件:#include <setjmp.h>
函数定义:int sigsetjmp(sigjmp_buf env, int savesigs)
函数说明:sigsetjmp()会保存目前堆栈环境,然后将目前的地址作一个记号,
而在程序其他地方调用siglongjmp()时便会直接跳到这个记号位置,然后还原堆栈,继续程序的执行。
参数env为用来保存目前堆栈环境,一般声明为全局变量
参数savesigs若为非0则代表搁置的信号集合也会一块保存
当sigsetjmp()返回0时代表已经做好记号上,若返回非0则代表由siglongjmp()跳转回来。
程序运行:
当ec_timeout = 3, run_time = 2时:
timeout = 3, run_time = 2
set timeout
running...
cancel timeout
当ec_timeout = 3, run_time = 4时:
timeout = 3, run_time = 4
set timeout
timeout
cancel timeout
表头文件:#include <setjmp.h>
函数定义:int sigsetjmp(sigjmp_buf env, int savesigs)
函数说明:sigsetjmp()会保存目前堆栈环境,然后将目前的地址作一个记号,
而在程序其他地方调用siglongjmp()时便会直接跳到这个记号位置,然后还原堆栈,继续程序的执行。
参数env为用来保存目前堆栈环境,一般声明为全局变量
参数savesigs若为非0则代表搁置的信号集合也会一块保存
当sigsetjmp()返回0时代表已经做好记号上,若返回非0则代表由siglongjmp()跳转回来。
返回:若直接调用则为0,若从siglongjmp调用返回则为非0
示例:
#include <stdio.h> #include <signal.h> #include <setjmp.h> #include <unistd.h> #include <sys/time.h> sigjmp_buf jmp_env; static void connect_alarm(int) { siglongjmp(jmp_env, 1); } int main() { // 当超时时间sec_timeout大于等于运行时间run_time时会跳过printf("running...\n"); int sec_timeout = 3; int run_time = 2; printf("timeout = %d, run time = %d\n", sec_timeout, run_time); if (sec_timeout) { // 超过用alarm函数设置的时间时产生此信号,调用connect_alarm函数 signal(SIGALRM, connect_alarm); alarm(sec_timeout); printf("set timeout\n"); if (sigsetjmp(jmp_env, 1)) { printf("timeout\n"); goto out; } } sleep(run_time); printf("running...\n"); out: if (sec_timeout) { // 取消先前设置的闹钟 alarm(0); printf("cancel timeout\n"); } return 0; }
程序运行:
当ec_timeout = 3, run_time = 2时:
timeout = 3, run_time = 2
set timeout
running...
cancel timeout
当ec_timeout = 3, run_time = 4时:
timeout = 3, run_time = 4
set timeout
timeout
cancel timeout
0 0
- sigsetjmp函数
- sigsetjmp, siglongjmp函数说明
- 函数setjmp,longjmp和sigsetjmp,siglongjmp
- C语言Sigsetjmp函数的用法
- 信号处理函数的返回sigsetjmp/siglongjmp
- 《UNIX环境高级编程》笔记--sigsetjmp和siglongjmp函数
- 非本地跳转函数setjmp,longjmp, sigsetjmp, siglongjmp
- sigsetjmp用法
- sigsetjmp & siglongjmp
- sigsetjmp, siglongjmp
- sigsetjmp用法
- siglongjmp、sigsetjmp
- 《unix环境高级编程》信号——sigsetjmp 函数和 siglongjmp 函数
- 《unix环境高级编程》信号——sigsetjmp 函数和 siglongjmp 函数
- sigsetjmp,siglongjmp的使用
- sigsetjmp,siglongjmp的使用
- alarm,sigsetjmp,siglongjmp
- sigsetjmp,siglongjmp的使用
- MyBatis配置详解
- 资料链接
- BeanUtils.copyProperties() 用法
- 20160930_赛码网_上台阶&约德尔测试
- sql server如何查看数据库的状态信息(比如表的数量)?
- sigsetjmp函数
- 异步 通过id获取信息,并获取值
- 第五周项目3-括号的匹配
- 备忘录模式:记录并回放鼠标运动轨迹过程
- hibernate基本方法作用
- JQuery与Ajax的应用
- 深入理解ORACLE中时间函数--SYSDATE
- 排序方法&集合
- 理解 ES5, ES2015(ES6) 和 TypeScript