社区
UNIX文化
帖子详情
sigsetjmp() 函数的返回值
浅浅忆
2014-04-03 02:03:17
我在一段代码里面看到这个函数,但是它的用法很奇怪!!
top = sigsetjmp(toplevel, 1) == 0;
printf("%d\n",top);
他是这么调用的。这个时候top打印出来的值是1
top = sigsetjmp(toplevel, 1) ;
printf("%d\n",top);
这样写。。重新编译,top的值居然变成0了。。求解!!!
...全文
365
2
打赏
收藏
sigsetjmp() 函数的返回值
我在一段代码里面看到这个函数,但是它的用法很奇怪!! top = sigsetjmp(toplevel, 1) == 0; printf("%d\n",top); 他是这么调用的。这个时候top打印出来的值是1 top = sigsetjmp(toplevel, 1) ; printf("%d\n",top); 这样写。。重新编译,top的值居然变成0了。。求解!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
buyong
2014-07-14
打赏
举报
回复
sigsetjmp(toplevel, 1)返回0, 0 == 0 返回1
tangpole
2014-04-22
打赏
举报
回复
== 优先高于 = 所以第一个是1啊,第二个的话是赋值,直接是0
UNIX高级编程 计算机科学丛书
前言 引言 本书说明Unix系统的程序设计界面—系统调用界面和标准C提供的很多
函数
。这些对编写在Unix系统中运行的程序是非常有帮助的。 与大多数操作系统一样,Unix对程序运行提供了大量的服务—打开文件、读文件、启动一道新程序、分配存储区以及获得当前时间等。这些被称之为系统调用界面(system call interface)。另外,标准C库提供了大量C程序广泛使用的
函数
(格式化输入变量的值、比较两个字符串等)。 系统调用和库
函数
系统上由Unix程序员手册中的第2,3部分说明。本书不是这些内容的重复。该手册没有给出实例,也不说明这些界面和
函数
设计的合理性,而这些则正是本书所要弥补的。 Unix标准 在八十年代出现的大量Unix版本的基础上,八十年代后期开始制定了几个国际标准,包括:C程序设计语言的ANSI标准、IEEE POSIX标准族(还在继续制定)、X/open可移植性指南。 本书也说明这些标准,但是并不只是说明这些标准本身,而是着重说明它们与广泛受到重视的一些实现之间的关系,这些实现主要是系统V版本4,以及将发布的4.4BSD。这样也就提供了一种对现实世界的说明,而这正是标准本身及描述符的文献所缺少的。 本书的组织 本书分成6个部分: 1. 对Unix程序设计概念和术语的概要描述(第一章),以及对各种Unix标准化工作和Unix实现的讨论(第二章)。 2. 不带缓存的I/O(第三章)、文件和目录(第四章、标准I/O库(第五章)以及系统数据文件(第六章)。 3. 进程—Unix进程的环境(第七章)、进程控制(第八章)、进程之间的关系(第九章)以及信号(第十章)。 4. 终端I/O(第十一章)、高级I/O(第十二章)以及精灵进程(第十三章) 5. IPC——进程间通信(第十四、十五章)。 6. 实例—一个数据库的
函数
库(第十六章)、与Postscrip打印机的通信(第十七章)、调制解调器拨号程序(第十八章)以及使用伪终端(第十九章)。 如果对C语言较熟悉并具有某些应用Unix的经验,那么对阅读本书是非常有益的,但是并不要求读者具有Unix的程序设计经验。本书面向的主要读者是:熟悉Unix的程序员,熟悉某个其它操作系统的程序员,他们希望了解大多数Unix系统提供的各种服务的详细情况。 本书中的实例 本书包含大量实例—大约10000行源代码。所有实例都用ANSL C语言编写。在阅读本书时,你应当有一本你所使用的UNIX系统的Unix程序员手册,关于实施的细节等有时需参考该手册。 对于几乎每一个
函数
和系统调用,本书都用一个小的完整的程序进行演示。这可以让我们清楚地了解它们的用法,包括参数、
返回值
等。有些小程序还不是以说明库
函数
和系统调用的复杂功能和应用技巧,所以本书中也包含了一些较大的实例(第十六、十七、十八和十九章)。 所有实例的源代码文件都可经Internet用匿名ftp取到,其主机站点是ftjp.uu.net,文件名是published/books/stevens.advprog.tar.Z。在你的机器上可对这些源代码进行修改并运行它们。 用于测试实例的系统 不幸的是所有操作系统都在不断变更,Unix也不例外。下图示出了系统V和4.XBSD的最近进展情况。 4.XBSD是由加州大学贝克莱分校计算机系统研究组开发的。该研究组也发布BSD NET1和BSD NET2版,它们包含了4.XBSD系统公众可用源代码。SVRX是AT& T的系统V的简称。XPG3是X/Open可移植性指南的第三次发行本的简称。ANSI C是C程序设计语言的ANSI标准。POSIX.1是Unix类系统界面的IEEE和ISD标准。2.2和2.3节将对这些标准和版本之间的差别作更多说明。 在本书中,用4.3+BSD表示BSD NET2和4.4BSD之间的Unix系统。 在本书写作时,4.4BSD尚未发行,所以不能称一个系统为4.4BSD。尽管为此, 需要一个简单的名字以引用此种系统,在全书中我们用4.3+BSD。 本书中的大多数实例曾在4种Unix系统上运行过,它们是: 1. U.H公司(UHC)的Unix System V/386 Release4.0 Version 2.0。该系统在Intel 80386处理机上运行。 2. 加州大学贝克莱分校计算机科学系(Computer Science Division)计算机系统研究组的4.3+BSD,该系统在一台HP工作站上运行。 3. 贝克莱软件设计公司的BSD/386(是BSD Net2的导出版),该系统在一台Intel 80386处理机系统上运行。该系统几乎与我们称之为4.3+BSD的相同。 4. Sun Microsystems的Sun OS4.1.1和4.1.2(该系统与贝克莱系统有很深的渊源团系,但也包含了很多系统V的特征),这些系统在SPARC工作站SLC上运行。 本书提供了与测试有关的许多时间信息,也说明了用于测试的系统实际系统。 目录 译者序 前言 第1章 UNIX基础知识 1.1 引言 1.2 登录 1.2.1 登录名 1.2.2 shell 1.3 文件和目录 1.3.1文件系统 1.3.2 文件名 1.3.3路径名 1.3.4工作目录 1.3.5起始目录 1.4输入和输出 1.4.1文件描述符 1.4.2标准输入、标准输出和标准出错 1.4.3不用缓存的I/O 1.4.4标准I/O 1.5程序和进程 1.5.1程序 1.5.2进程和进程ID 1.5.3进程控制 1.6 ANSI C 1.6.1
函数
原型 1.6.2类属指针 1.6.3原始系统数据类型 1.7 出错处理 1.8 用户标识 1.8.1 用户ID 1.8.2 组ID 1.8.3 添加组ID 1.9 信号 1.10 UNIX时间值 1.11 系统调用和库
函数
1.12 小结 习题 第2章 UNIX标准化及实现 2.1 引言 2.2 UNIX标准化 2.2.1 ANSI C 2.2.2 IEEE POSIX 2.2.3 X/Open XPG3 2.2.4 FIPS 2.3 UNIX实现 2.3.1 SVR4 2.3.2 4.3+BSD 2.4 标准和实现的关系 2.5 限制 2.5.1 ANSI C限制 2.5.2 POSIX限制 2.5.3 XPG3限制 2.5.4 sysconf、pathconf和 fpathconf
函数
2.5.5 FIPS 151-1要求 2.5.6 限制总结 2.5.7 未确定的运行时间限制 2.6 功能测试宏 2.7 基本系统数据类型 2.8 标准之间的冲突 2.9 小结 习题 第3章 文件I/O 3.1 引言 3.2 文件描述符 3.3 open
函数
3.4 creat
函数
3.5 close
函数
3.6 lseek
函数
3.7 read
函数
3.8 write
函数
3.9 I/O的效率 3.10 文件共享 3.11 原子操作 3.11.1 添加至一个文件 3.11.2 创建一个文件 3.12 dup和dup2
函数
3.13 fcntl
函数
3.14 ioctl
函数
3.15 /dev/fd 3.16 小结 习题 第4章 文件和目录 4.1 引言 4.2 stat,fstat和lstat
函数
4.3 文件类型 4.4 设置-用户-ID和设置-组-ID 4.5 文件存取许可权 4.6 新文件和目录的所有权 4.7 access
函数
4.8 umask
函数
4.9 chmod 和fchomod
函数
4.10 粘住位 4.11 chown, fchown和 lchown
函数
4.12 文件长度 4.13 文件截短 4.14 文件系统 4.15 link, unlink, remove和 rename
函数
4.16 符号连接 4.17 symlink 和readlink
函数
4.18 文件的时间 4.19 utime
函数
4.20 mkdir和 rmdir
函数
4.21 读目录 4.22 chdir, fchdir和 getcwd
函数
4.23 特殊设备文件 4.24 sync和 fsync
函数
4.25 文件存取许可权位小结 4.26 小结 习题 第5章 标准I/O库 5.1 引言 5.2 流和FILE对象 5.3 标准输入、标准输出和标准出错 5.4 缓存 5.5 打开流 5.6 读和写流 5.7 每次一行I/O 5.8 标准I/O的效率 5.9 二进制I/O 5.10 定位流 5.11 格式化I/O 5.12 实现细节 5.13 临时文件 5.14 标准I/O的替代软件 5.15 小结 习题 第6章 系统数据文件和信息 6.1 引言 6.2 口令文件 6.3 阴影口令 6.4 组文件 6.5 添加组ID 6.6 其他数据文件 6.7 登录会计 6.8 系统标识 6.9 时间和日期例程 6.10 小结 习题 第7章 UNIX进程的环境 7.1 引言 7.2 main
函数
7.3 进程终止 7.3.1 exit和_exit
函数
7.3.2 atexit
函数
7.4 命令行参数 7.5 环境表 7.6 C程序的存储空间布局 7.7 共享库 7.8 存储器分配 7.9 环境变量 7.10
set
jmp
和long
jmp
函数
7.10.1 自动, 寄存器和易失变量 7.10.2 自动变量的潜在问题 7.11 getrlimit 和
set
rlimit
函数
7.12 小结 习题 第8章 进程控制 8.1 引言 8.2 进程标识 8.3 fork
函数
8.4 vfork
函数
8.5 exit
函数
8.6 wait和waitpid
函数
8.7 wait3和 wait4
函数
8.8 竞态条件 8.9 exec
函数
8.10 更改用户ID 和组ID 8.10.1
set
reuid 和
set
regid
函数
8.10.2
set
euid和
set
egid
函数
8.10.3 组ID 8.11 解释器文件 8.12 system
函数
8.13 进程会计 8.14 用户标识 8.15 进程时间 8.16 小结 习题 第9章 进程关系 9.1 引言 9.2 终端登录 9.2.1 4.3+BSD终端登录 9.2.2 SVR4终端登录 9.3 网络登录 9.3.1 4.3+BSD网络登录 9.3.2 SVR4网络登录 9.4 进程组 9.5 对话期 9.6 终端控制 9.7 tcgetpgrp 和tc
set
pgrp
函数
9.8 作业控制 9.9 shell执行程序 9.10 孤儿进程组 9.11 4.3+BSD实现 9.12 小结 习题 第10章 信号 10.1 引言 10.2 信号的概念 10.3
sig
nal
函数
10.3.1 程序起动 10.3.2 进程创建 10.4 不可靠的信号 10.5 中断的系统调用 10.6 可再入
函数
10.7
SIG
CLD语义 10.8 可靠信号术语和语义 10.9 kill 和raise
函数
10.10 alarm和 pause
函数
10.11 信号集 10.12
sig
procmask
函数
10.13
sig
pending
函数
10.14
sig
action
函数
10.15
sig
set
jmp
和
sig
long
jmp
函数
10.16
sig
suspend
函数
10.17 abort
函数
10.18 system
函数
10.19 sleep
函数
10.20 作业控制信号 10.21 其他特征 10.21.1 信号名字 10.21.2 SVR4信号处理程序的附加参数 10.21.3 4.3+BSD信号处理程序的附加参数 10.22 小结 习题 第11章 终端I/O 11.1 引言 11.2 综述 11.3 特殊输入字符 11.4 获得和设置终端属性 11.5 终端选择标志 11.6 stty命令 11.7 波特率
函数
11.8 行控制
函数
11.9 终端标识 11.10 规范方式 11.11 非规范方式 11.12 终端的窗口大小 11.13 termcap, terminfo和 curses 11.14 小结 习题 第12章 高级I/O 12.1 引言 12.2 非阻塞I/O 12.3 记录锁 12.3.1 历史 12.3.2 fcntl记录锁 12.3.3 锁的隐含继承和释放 12.3.4 4.3+BSD的实现 12.3.5 建议性锁和强制性锁 12.4 流 12.4.1 流消息 12.4.2 putmsg和 putpmsg
函数
12.4.3 流ioct1操作 12.4.4 write至流设备 12.4.5 写方式 12.4.6 getmsg和 getpmsg
函数
12.4.7 读方式 12.5 I/O多路转接 12.5.1 select
函数
12.5.2 poll
函数
12.6 异步I/O 12.6.1 SVR4 12.6.2 4.3+BSD 12.7 readv和writev
函数
12.8 readn和 writen
函数
12.9 存储映射I/O 12.10 小结 习题 第13章 精灵进程 13.1 引言 13.2 精灵进程的特征 13.3 编程规则 13.4 出错记录 13.4.1 SVR4流log驱动程序 13.4.2 4.3+BSD syslog设施 13.5 客户机-服务器模型 13.6 小结 习题 第14章 进程间通信 14.1 引言 14.2 管道 14.3 popen和 pclose
函数
14.4 协同进程 14.5 FIFO 14.6 系统V IPC 14.6.1 标识符和关键字 14.6.2 许可权结构 14.6.3 结构限制 14.6.4 优点和缺点 14.7 消息队列 14.8 信号量 14.9 共享存储 14.10 客户机-服务器属性 14.11 小结 习题 第15章 高级进程间通信 15.1 引言 15.2 流管道 15.3 传送文件描述符 15.3.1 SVR4 15.3.2 4.3BSD 15.3.3 4.3+BSD 15.4 open服务器第1版 15.5 客户机-服务器连接
函数
15.5.1 SVR4 15.5.2 4.3+BSD 15.6 open服务器第2版 15.7 小结 习题 第16章 数据库
函数
库 16.1 引言 16.2 历史 16.3
函数
库 16.4 实现概述 16.5 集中式或非集中式 16.6 并发 16.6.1 粗锁 16.6.2 细锁 16.7 源码 16.8 性能 16.8.1 单进程的结果 16.8.2 多进程的结果 16.9 小结 习题 第17章 与PostScript打印机通信 17.1 引言 17.2 PostScript通信机制 17.3 假脱机打印 17.4 源码 17.5 小结 习题 第18章 调制解调器拨号器 18.1 引言 18.2 历史 18.3 程序设计 18.4 数据文件 18.5 服务器设计 18.6 服务器源码 18.7 客户机设计 18.7.1 终端行规程 18.7.2 一个进程还是两个进程 18.8 客户机源码 18.9 小结 习题 第19章 伪终端 19.1 引言 19.2 概述 19.2.1 网络登录服务器 19.2.2 script程序 19.2.3 expect程序 19.2.4 运行协同程序 19.2.5 观看长时间运行程序的输出 19.3 打开伪终端设备 19.3.1 SVR4 19.3.2 4.3+BSD 19.4 pty_fork
函数
19.5 pty程序 19.6 使用pty程序 19.6.1 utmp文件 19.6.2 作业控制交互 19.6.3 检查长时间运行程序的输出 19.6.4 script程序 19.6.5 运行协同进程 19.6.6 用交互模式驱动交互式程序 19.7 其他特性 19.7.1 打包模式 19.7.2 远程模式 19.7.3 窗口大小变化 19.7.4 信号发生 19.8 小结 习题 附录A
函数
原型 附录B 其他源代码 附录C 习题答案 参考书目
C语言
Sig
set
jmp
函数
的用法
1.
Sig
set
jmp
函数
表头文件:#include
函数
定义:int
sig
set
jmp
(
sig
jmp
_buf env, int save
sig
s)
函数
说明:
sig
set
jmp
()会保存目前堆栈环境,然后将目前的地址作一个记号,而在程序其他地方调用
sig
long
jmp
()时便会直接跳到这个记号位置,然后还原堆栈,继续程序的执行。 参数env为用来保存目前堆栈环境,一般声明为全局变
sig
set
jmp
、
sig
long
jmp
sig
set
jmp
函数
用于保存程序当前的执行环境,以便稍后使用
sig
long
jmp
来恢复。
sig
set
jmp
和
sig
long
jmp
是C语言中用于实现非局部跳转的两个
函数
,它们在头文件中定义。这两个
函数
用于处理信号(
Sig
nal),在某些情况下,可以用于实现异常处理和协程。env:被设置的环境数据对象,
sig
long
jmp
会根据该对象跳转。save
sig
s: 用来设置env是否需要保存信号相关环境信息。为0时不需要相关信息。
返回值
:如果是由
sig
set
jmp
调用返回,
返回值
为0。
第六章_信号 :
函数
sig
set
jmp
和
sig
long
jmp
函数
sig
set
jmp
和
sig
long
jmp
在信号处理程序中经常调用long
jmp
函数
以返回到程序的主循环中,而不是从该处理程序返回。 但是,调用long
jmp
有一个问题。当捕捉到一个信号时,进入信号捕捉
函数
,此时当前信号被自动地加到进程的信号屏蔽字中。这阻止了后来产生的这种信号中断该信号处理程序。(仅当从信号捕捉
函数
返回时再将进程的信号屏蔽字复位为原先值)如果用long
jmp
跳出信号处理程序,那么,对此进程的信号屏蔽字会发生什么呢?(
set
jmp
和long
jmp
保存和恢复信号屏蔽字,还是不保存和恢复,不
Linux_C编程—信号处理
函数
的返回
文章目录信号处理
函数
执行完怎么办
set
jmp
()/long
jmp
()
sig
set
jmp
()/
sig
long
jmp
() 信号处理
函数
执行完怎么办 一般来讲,信号处理
函数
执行完毕都会正常返回,也可以调用其他
函数
返回到程序的主
函数
中。这里总结一下信号处理
函数
执行完毕后跳转到主
函数
中指定的位置的操作(有点类似goto语句,但goto不支持
函数
间的跳转,只能在一个
函数
中跳转),主要是通过俩对
函数
来实现的: ...
UNIX文化
2,161
社区成员
4,355
社区内容
发帖
与我相关
我的任务
UNIX文化
Linux/Unix社区 UNIX文化
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 UNIX文化
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章