- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6单元 信号
* * * 最低位代表信号1 * 信号集给我们提供了一个能表示多个信号的是数据类型(sigset_t), 它将在sigprocmask, sigpending, sigsuspend之类的函数中用到, 这些函数我会在以后的文章中介绍. 1. 信号集相关函数: #include?signal.hint?sigemptyset(sigset_t?*set);成功则返回0,?出错则返回-1. ?这个函数用作初始化set指向的信号集, 清空其中的所有信号. ? #include?signal.hint?sigfillset(sigset_t?*set);成功则返回0,?出错则返回-1. 这个函数用作初始化set指向的信号集, 填充其中的所有信号. ? #include?signal.hint?sigaddset(sigset_t?*set,?int?signo);int?sigdelset(sigset_t?*set,?int?signo);成功则返回0,?出错则返回-1. 这两个函数用作向set指向的信号集中, 增加/删除一个signo代表的信号. #include?signal.h int?sigismember(const?sigset_t?*set,?int?signo); 真则返回1,?假则返回0,?出错则返回-1. 这个函数用作判断signo信号是否在set指向的信号集中. 2. 宏: 在signal.h中有两个宏: #define?sigemptyset(ptr)??(*(ptr)?=?0) #define?sigfillset(ptr)??(*ptr?=?~(sigset_t)0,?0) 这两个宏分别定义了sigemptyset和sigfillset两个函数的行为. sigemptyset: 把ptr指向的地址的内容设为0. sigfillset: 这是一个逗号表达式, 把0转换为sigset_t类型, 然后按位取反, 并返回0. 通过以上两个宏, 我们可以确切地说, sigset_t是用多位(比信号总数更多的位数)来表示信号集概念的. 因此, sigaddset: 将某一位设置为1. sigdelset: 将某一位设置为0. sigismember: 测试某一个指定位. 下面我们来实现这些函数. 3. 实例: #include?signal.h#include?errno.h/*?NSIG?defined?in?signal.h?*/#define?SIGBAD(signo)?((signo)?=?0?||?(signo)?=?NSIG)int?sigaddset(sigset_t?*set,?int?signo){????if?(SIGBAD(signo))????{????????errno?=?EINVAL;????????return?(-1);????}????*set?|=?1??(signo?-1);????????return?0;}int?sigdelset(sigset_t?*set,?int?signo){????if?(SIGBAD(signo))????{????????errno?=?EINVAL;????????return?(-1);????}????*set?=?~(1??(signo?-1));????return?0;}int?sigismember(const?sigset_t?*set,?int?signo){????if?(SIGBAD(signo))????{????????errno?=?EINVAL;????????return?(-1);????}????????return?((*set??(1??(signo?-1)))?!=?0);} 说明一下里面的几个细节: signo - 1: 因为不存在编号为0的信号, 也就是第0位与编号为1的信号是对应的, 所以减1. SIGBAD: 小于等于0, 或者大于最大信号编号NSIG. 1 : 1的左移位操作, 右边补0, 所以执行或操作时直接实现添加; 执行与操作时需要先取反, 以保证本位为0, 其他位不变, 这样来实现删除. sigismember: 最后一个return语句看上去有些复杂. 想起来很难想到, 但看起来应该不难. 执行移位后的与操作, 当存在时使本位保持不变, 其他位清零; 当不存在时, 全部清零. 然后判断是否为0, 这样来实现判断存在性. * 简介 restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即:它告诉
您可能关注的文档
- 第5章 失业.ppt
- 第5章 阶段专题复习.ppt
- 第5章 品牌战略和品牌组合.ppt
- 第5章 微分方程建模(动态模型).ppt
- 第5章 增容剂及其界面增容.ppt
- 第5章 人体内废物的排出2013-6-01.ppt
- 第5章 海关监管货物及其报关程序2.ppt
- 第5章 数据库表的规范化.ppt
- 第5章 掘进通风.ppt
- 第5章 生物氧化和生物能.ppt
- 2024高考物理一轮复习规范演练7共点力的平衡含解析新人教版.doc
- 高中语文第5课苏轼词两首学案3新人教版必修4.doc
- 2024_2025学年高中英语课时分层作业9Unit3LifeinthefutureSectionⅢⅣ含解析新人教版必修5.doc
- 2024_2025学年新教材高中英语模块素养检测含解析译林版必修第一册.doc
- 2024_2025学年新教材高中英语单元综合检测5含解析外研版选择性必修第一册.doc
- 2024高考政治一轮复习第1单元生活与消费第三课多彩的消费练习含解析新人教版必修1.doc
- 2024_2025学年新教材高中英语WELCOMEUNITSectionⅡReadingandThi.doc
- 2024_2025学年高中历史专题九当今世界政治格局的多极化趋势测评含解析人民版必修1.docx
- 2024高考生物一轮复习第9单元生物与环境第29讲生态系统的结构和功能教案.docx
- 2024_2025学年新教材高中英语UNIT5LANGUAGESAROUNDTHEWORLDSect.doc
文档评论(0)