为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > [设计]信号屏蔽字详解

[设计]信号屏蔽字详解

2017-12-02 4页 doc 14KB 4阅读

用户头像

is_421808

暂无简介

举报
[设计]信号屏蔽字详解[设计]信号屏蔽字详解 信号屏蔽字详解 1. 概念: 信号屏蔽字就是进程中被阻塞的信号集, 这些信号不能发送给该进程, 它们在该进程中被"屏蔽"了. 后面我们会提到, 实际上它们是被阻塞了. 2. 信号屏蔽函数: #include int sigprocmask(int how, const sigset_t *restrict set, sigset_t *restrict oset); 成功则返回0, 出错则返回-1. sigprocmask函数有3个参数: how: 修改信号屏蔽字的方式. set: ...
[设计]信号屏蔽字详解
[]信号屏蔽字详解 信号屏蔽字详解 1. 概念: 信号屏蔽字就是进程中被阻塞的信号集, 这些信号不能发送给该进程, 它们在该进程中被"屏蔽"了. 后面我们会提到, 实际上它们是被阻塞了. 2. 信号屏蔽函数: #include int sigprocmask(int how, const sigset_t *restrict set, sigset_t *restrict oset); 成功则返回0, 出错则返回-1. sigprocmask函数有3个参数: how: 修改信号屏蔽字的方式. set: 把这个信号集设为新的当前信号屏蔽字. 如果为NULL则不改变. oset: 保存进程旧的信号屏蔽字. 如果为NULL则不保存. 参数中的how可以取3个值: sigprocmask中的how参数 how 说明 SIG_BLOCK 修改后, 该进程新的信号屏蔽字是其当前屏蔽字和set指向的信号集的并集. SIG_UNBLOCK 修改后, 该进程新的信号屏蔽字是其当前屏蔽字和set指向的信号集的补集的交集. SIG_SETMASK 修改后, 该进程新的信号屏蔽字将被set指向的信号集的值代替另外要说的是, sigprocmask只为单线程定义的, 在多线程中要使用pthread_sigmask. 3. 未处理的信号: 在调用信号屏蔽的相关函数后, 被屏蔽的信号对于调用进程是阻塞的, 不能发送给调用进程, 因此是未决的. 取得这些阻塞的信号集, 可以通过调用sigpending函数. #include int sigpending(sigset_t *set); 成功则返回0, 出错则返回-1. 4. 实例: 下面通过一个简单的实例来说明这篇文章中所讲到的两个函数. #include #include #include #include static void sig_quit(int signo) { printf("SIGQUIT is caught "); } int main() { sigset_t new, old, pend; if (signal(SIGQUIT, sig_quit) == SIG_ERR) { perror("signal"); exit(1); } if (sigemptyset(&new) < 0) perror("sigemptyset"); if (sigaddset(&new, SIGQUIT) < 0) perror("sigaddset"); if (sigprocmask(SIG_SETMASK, &new, &old) < 0) { perror("sigprocmask"); exit(1); } printf("SIGQUIT is blocked "); printf("Now try Ctrl \ "); sleep(5); if (sigpending(&pend) < 0) perror("sigpending"); if (sigismember(&pend, SIGQUIT)) printf("SIGQUIT pending "); if (sigprocmask(SIG_SETMASK, &old, NULL) < 0) { perror("sigprocmask"); exit(1); } printf(" SIGQUIT unblocked "); printf("Now try Ctrl \ "); sleep(5); return 0; } 这个程序在开始的时候用sigprocmask屏蔽了SIGQUIT(ctrl+\触发), 在5秒内触发的该信号将可以从sigpending中获得; 然后程序把SIGQUIT解除屏蔽(恢复以前的屏蔽字), 此时再触发该信号将调用sig_quit信号处理函数.
/
本文档为【[设计]信号屏蔽字详解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索