转载自:sigsetjmp使用方法

侵犯您的权益,请联系:windeal12@qq.com

分类: c/c++ linux2012-02-03
12:33 1252人阅读 评论(0) 收藏 举报
相关函数: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

实例:

  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include <setjmp.h>
  4. #include <unistd.h>
  5. #include <sys/time.h>
  6. sigjmp_buf jmp_env;
  7. static void connect_alarm(int)
  8. {
  9. siglongjmp(jmp_env, 1);
  10. }
  11. int main()
  12. {
  13. // 当超时时间sec_timeout大于等于执行时间run_time时会跳过printf("running...\n");
  14. int sec_timeout = 3;
  15. int run_time = 2;
  16. printf("timeout = %d, run time = %d\n", sec_timeout, run_time);
  17. if (sec_timeout)
  18. {
  19. // 超过用alarm函数设置的时间时产生此信号。调用connect_alarm函数
  20. signal(SIGALRM, connect_alarm);
  21. alarm(sec_timeout);
  22. printf("set timeout\n");
  23. if (sigsetjmp(jmp_env, 1))
  24. {
  25. printf("timeout\n");
  26. goto out;
  27. }
  28. }
  29. sleep(run_time);
  30. printf("running...\n");
  31. out:
  32. if (sec_timeout)
  33. {
  34. // 取消先前设置的闹钟
  35. alarm(0);
  36. printf("cancel timeout\n");
  37. }
  38. return 0;
  39. }

程序执行:

当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



APUE学习笔记——10.15 sigsetjmp和siglongjmp的更多相关文章

  1. APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

    转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...

  2. APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号

    如有转载,请注明出处:Windeal专栏 首先简述下几个概念的关系: 我们通过信号集建立信号屏蔽字,使得信号发生阻塞,被阻塞的信号即未决信号. 信号集: 信号集:其实就是一系列的信号.用sigset_ ...

  3. APUE学习笔记——10信号——信号接口函数 signal 和 sigaction

    signal函数     signal函数是早起Unix系统的信号接口,早期系统中提供不可靠的信号机制.在后来的分支中,部分系统使用原来的不可靠机制定义signal函数,如 Solaris 10 .而 ...

  4. APUE学习笔记——10 信号

    信号的基本概念     信号是软件中断,信号提供了解决异步时间的方法.     每一中信号都有一个名字,信号名以SIG开头. 产生信号的几种方式     很多条件可以产生信号:     终端交互:用户 ...

  5. APUE学习笔记——10.18 system函数 与waitpid

    system函数 system函数用方便在一个进程中执行命令行(一行shell命令). 用法如下: #include <stdio.h> #include <stdlib.h> ...

  6. APUE学习笔记——10.可靠信号与不可靠信号

    首先说明:现在大部分Unix系系统如Linux都已经实现可靠信号. 1~31信号与SIGRTMIN-SIGRTMAX之间并不是可靠信号与不可靠信号的区别,在大多数系统下他们都是可靠信号. 只不过: 1 ...

  7. SQL反模式学习笔记10 取整错误

    目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处 ...

  8. Python学习笔记(15)- os\os.path 操作文件

    程序1 编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图: import os def countfile(path): dict1 = {} # 定义一个字典 all_files = ...

  9. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

随机推荐

  1. 利用Apperance协议定义View的全局外观

    假设要定义一个全局的bkColor用于背景颜色 1.@property(nonatomic,strong)UIColor *bkColor UI_APPEARANCE_SELECTOR; 2.在下面方 ...

  2. List(双向链表)

    List是一种双向链表结构,可以从第一个元素开始删除.插入,也可以从最后一个元素删除.插入,下面介绍一下 List 中常用的几个函数: 一.List 中的 begin 和 end 函数 : 和其他几种 ...

  3. poj 2135 Farm Tour 费用流

    题目链接 给一个图, N个点, m条边, 每条边有权值, 从1走到n, 然后从n走到1, 一条路不能走两次,求最短路径. 如果(u, v)之间有边, 那么加边(u, v, 1, val), (v, u ...

  4. Qt WebKit and HTML5 geolocation | Qt Project forums | Qt Project

    Qt WebKit and HTML5 geolocation | Qt Project forums | Qt Project Qt WebKit and HTML5 geolocation   I ...

  5. MySQL 5.7.14 安装

    http://www.cnblogs.com/zcGu/articles/5740936.html 因笔者个人需要需要在本机安装Mysql,先将安装过程记录如下,希望对他人有所参考. 一, 1, 进入 ...

  6. 【转载】如何用Maven创建web项目(具体步骤)

    使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 ...

  7. html 5 新增标签及简介

    作为下一代Web技术的代表,HTML5概念在近些年尤其火热.据了解,HTML5受到垂青最直接的原因就是其跨平台性,除此之外,它不仅仅可以用于表示Web内容,还可能将Web带入一个广阔的生态平台. 下面 ...

  8. LightOJ 1317

    Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %lluDescription You probab ...

  9. opencv第一站:配置opencv环境(2015-12-12)

    今天论坛申请的书< OpenCV 计算机视觉编程攻略(中国工信出版社)>到了,准备研究研究机器视觉. 晚上安装了 vc2008 及 opencv 最新版 3.0.0,试了各种配置都是错误提 ...

  10. Ubuntu 15.04 Rails4.2.5 处理异常

    1. 修改: /app/controllers/application_controller.rb文件为如下样子: class ApplicationController < ActionCon ...