APUE学习笔记——10.15 sigsetjmp和siglongjmp
转载自:sigsetjmp使用方法
如侵犯您的权益,请联系:windeal12@qq.com
表头文件:#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
APUE学习笔记——10.15 sigsetjmp和siglongjmp的更多相关文章
- APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...
- APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号
如有转载,请注明出处:Windeal专栏 首先简述下几个概念的关系: 我们通过信号集建立信号屏蔽字,使得信号发生阻塞,被阻塞的信号即未决信号. 信号集: 信号集:其实就是一系列的信号.用sigset_ ...
- APUE学习笔记——10信号——信号接口函数 signal 和 sigaction
signal函数 signal函数是早起Unix系统的信号接口,早期系统中提供不可靠的信号机制.在后来的分支中,部分系统使用原来的不可靠机制定义signal函数,如 Solaris 10 .而 ...
- APUE学习笔记——10 信号
信号的基本概念 信号是软件中断,信号提供了解决异步时间的方法. 每一中信号都有一个名字,信号名以SIG开头. 产生信号的几种方式 很多条件可以产生信号: 终端交互:用户 ...
- APUE学习笔记——10.18 system函数 与waitpid
system函数 system函数用方便在一个进程中执行命令行(一行shell命令). 用法如下: #include <stdio.h> #include <stdlib.h> ...
- APUE学习笔记——10.可靠信号与不可靠信号
首先说明:现在大部分Unix系系统如Linux都已经实现可靠信号. 1~31信号与SIGRTMIN-SIGRTMAX之间并不是可靠信号与不可靠信号的区别,在大多数系统下他们都是可靠信号. 只不过: 1 ...
- SQL反模式学习笔记10 取整错误
目标:使用小数取代整数 反模式:使用Float类型 根据IEEE754标识,float类型使用二进制格式编码实数数据. 缺点:(1)舍入的必要性: 并不是所有的十进制中描述的信息都能使用二进制存储,处 ...
- Python学习笔记(15)- os\os.path 操作文件
程序1 编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图: import os def countfile(path): dict1 = {} # 定义一个字典 all_files = ...
- Android:日常学习笔记(10)———使用LitePal操作数据库
Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...
随机推荐
- bootstrap table笔记
获取选中行:$table.bootstrapTable('getSelections');
- Redis的入门Demo(java)
java代码部分参考了:http://www.runoob.com/redis/redis-java.html 在java中使用Redis,需要引入Redis驱动,就是jedis-2.1.0.jar, ...
- ThinkPHP常量参考
常用常量 APP_NAME 当前项目名称 APP_PATH 当前项目路径 GROUP_NAME 当前分组名称 MODULE_NAME 当前Action模块名称 ACTION_NAME 当前操作的名称 ...
- 在raw_input()中使用中文提示,在CMD下中文乱码问题解决。。。
错误的程序及结果: 解决1: guess = int(raw_input('请输入一个整数:'.decode('utf-8').encode('gbk'))) 解决2: guess = int(raw ...
- 什么是weblogic?安装步骤详解
weblogic,就是用于java开发的web服务器. tomcat熟悉吧,跟tomcat一个作用,是比tomcat更具优势的web服务器. 安装:(转载) 1.提供安装文件网盘下载:链接处2.安装过 ...
- HighCharts学习
http://www.stepday.com/topic/?369 http://www.helloweba.com/view-blog-156.html
- UV印刷
UV就是在一张印上你想要的图案上面过上一层油,主要是增加产品亮度,保护产品表面,其硬度高,耐腐蚀摩擦,不易出现划痕等,有些复膜产品现改为上UV,能达到环保要求,但UV产品不易粘接,有些只能通过局部UV ...
- QT 获取文件MD5值
/* 方法1 */ QFile theFile(fileNamePath); theFile.open(QIODevice::ReadOnly); QByteArray ba = QCryptogra ...
- Delphi中的“委托”
.NET中有委托(Delegate)的概念,其声明形式如下所示: public delegate void MyDelegate(int aIntParam, string aStringPa ...
- MySql学习笔记(转载)
. 数值类型 -- a. 整型 ---------- 类型 字节 范围(有符号位) tinyint 1字节 - ~ ...