顺序查找 Java中高进阶架构 selenium text gwt get tree x86 coldfusion css最后一个子元素 软件测试项目实战案例 java清空数组 mysql错误代码1064 spark大数据处理技术 字符串中包含某个字符串 nikto扫描web漏洞 webapp打包 bootstrap颜色 html下拉框默认选中 java 大文件上传 java 注解 python加注释 python安装教程 python异常 python学习方法 java初级 java遍历集合 java截取 java语言运算符 java集合类型 java网页 linuxshell编程 微信客户管理系统 msdev pdf拆分工具 整站系统 英雄联盟体验服转换器 苹果手机总是自动重启 ansys安装教程 英雄联盟设置
当前位置: 首页 > 学习教程  > 编程语言

linux信号【5】sigsetjmp和siglongjmp函数

2020/8/11 19:50:15 文章标签:

文章目录

  • 简述

简述

这两个函数与 s e t j m p和l o n g j m p函数非常相似,都是用于程序的非局部转移。而在信号处理程序中,对应使用的就是sigsetjmp和siglongjmp函数。在信号处理程序中,有时需要返回到序的主循环中,而不是从该处理程序返回。为什么不直接使用 s e t j m p和l o n g j m p呢? 因为用l o n g j m p时有一个问题。当捕捉到一个信号时,进入信号捕捉函数,此时当前信号被
自动地加到进程的信号屏蔽字中。这阻止了后来产生的这种信号中断此信号处理程序。如果用
l o n g j m p跳出此信号处理程序,则对此进程的信号屏蔽字会发生什么呢 ?
为了允许两种形式并存,P O S I X . 1并没有说明s e t j m p和l o n g j m p对信号屏蔽字的作用,而是定义了两个新函数s i g s e t j m p和s i g l o n g j m p。在信号处理程序中作非局部转移时应当使用这两个
函数。

int sigsetjmp(sigjmp_buf e n v, int s a v e m a s k) ;
返回:若直接调用则为0,若从s i g l o n g j m p调用返回则为非0
void siglongjmp(sigjmp_buf e n v, int val) ;

这两个函数和s e t j m p,l o n g j m p之间的唯一区别是s i g s e t j m p增加了一个参数。如果s a v e m a s k非0,
则s i g s e t j m p在e n v中保存进程的当前信号屏蔽字。调用 s i g l o n g j m p时,如果带非0 s a v e m a s k的
s i g s e t j m p调用已经保存了e n v,则s i g l o n g j m p从其中恢复保存的信号屏蔽字


本文链接: http://www.dtmao.cc/news_show_100214.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?