Linux--sigsuspend函数的使用
sigsuspend函数
#include <signal.h>int sigsuspend(const sigset_t *mask);
在sigsuspend函数执行期间,不管之前的信号屏蔽集,使用sigsuspend函数参数的屏蔽集,直至函数执行完毕。相当于信号屏蔽集暂时被替换。
模拟在拷贝文件时,有很多文件要拷贝,需要很长时间,但是如果我们在拷贝前屏蔽信号,结束拷贝后解锁,这中间万一有信号需要处理,就需要隔很久才可以处理,所以我们希望在拷贝完一个文件后就看看有没有信号需要处理,有就替换屏蔽集,执行外部处理,没有就继续拷贝。
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>void handler(int s) {//信号处理函数printf("执行外部动作!\n");sleep(3);printf("外部动作执行完成!\n");
}int main() {srand(time(NULL));sigset_t set, old_set, pend;int i = 1;signal(SIGINT, handler);sigemptyset(&set);sigemptyset(&old_set);sigaddset(&set, SIGINT);sigprocmask(SIG_BLOCK, &set, &old_set);//开始屏蔽信号while (i <= 5) {printf("开始拷贝文件.0%d\n", i);sleep(3);printf("拷贝结束!\n");fflush(stdout);++i;sigemptyset(&pend);sigpending(&pend);if (sigismember(&pend, SIGINT)) {printf("有信号需要处理!\n");sigset_t tmp;sigemptyset(&tmp);sigsuspend(&tmp); //使用空信号屏蔽集,替换之前的信号屏蔽,相当于解屏蔽}}sigprocmask(SIG_SETMASK, &old_set, NULL);//解除屏蔽return 0;
}
Linux--sigsuspend函数的使用相关推荐
- Linux信号实现精确到微秒的sleep函数:通过sigsuspend函数解决时序竞态问题
原理就是先使用定时器定时,然后再使用pause函数或者sigsuspend函数主动阻塞挂起,最终恢复现场. 如果使用pause函数的话,优点是使用简单,缺点是有可能产生时序竞态,导致进程一直阻塞下去: ...
- Unix/Linux编程:竞态条件与sigsuspend函数
利用pause和alarm函数实现sleep #include <unistd.h>int pause(void); pause函数使调用进程挂起直到有信号到达.如果信号的处理动作是终止进 ...
- linux c语言内核函数手册,Linux C函数实例速查手册
函数学习目录: 第1章 初级I/O函数 1.1 close函数:关闭已经打开的文件 1.2 creat函数:创建一个文件 1.3 dup函数:复制文件描述符 1.4 dup2函数:复制文件描述符到指定 ...
- 时序竟态条件分析 sigsuspend函数 Linu系统编程
简单的自定义sleep函数 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include< ...
- Linux系统函数之IO函数
技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.标准C库IO函数工作流程 IO缓冲区的作用? 大部分硬盘都是机械硬盘,读取寻道时间 ...
- linux计时函数的使用
linux计时函数的使用 linux下计时函数的使用目的是测量程序运行的时间 头文件 #include <sys/time.h> 计时函数 int gettimeofday(struct ...
- linux C函数之strdup函数分析【转】
本文转载自:http://blog.csdn.net/tigerjibo/article/details/12784823 linux C函数之strdup函数分析 一.函数分析 1.函数原型: [c ...
- Linux getopt()函数 getopt_long()函数---转
http://hi.baidu.com/scoundrelgg/item/d4083f8412eea05d26ebd97f Linux getopt()函数 getopt_long()函数 get_o ...
- linux shell函数
linux shell函数
- Linux信号处理函数可中断么,linux中关于信号处理笔记(一)
#include static void sig_quit(int); int main(void) { sigset_t newmask, oldmask, pendmask; if(signal( ...
最新文章
- 开源版本_重磅!阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell
- oracle生成xml格式化,介绍关于Oracle下存取XML格式数据的方式教程一览
- excel如何匹配同名数据_Excel如何查找名字重复的数据
- 关系代数——附加的关系运算(1)
- MYSQL数据库应用优化
- python灰度图像为什么显示成彩色的_python opencv image 怎么变成伪彩色
- 数据反正模拟 matlab,[2018年最新整理]信号处理MATLAB函数.doc
- 用asp.net实现微博系统_微信几亿人在线的点赞、取消点赞系统,用Redis如何实现?...
- 多目标进化优化_科研一角|论文分享 | 等离子喷焊工艺参数多目标优化
- Lazyload 延迟加载效果(转载)
- JS Date.Format
- 2020美赛回忆录|平生第一次打美赛的获奖方式......美赛准备方法和思想
- dstwo linux 模拟器,dstwo md模拟器使用图文教程
- 三调业务摘要201709
- 使用opencv应用程序正常初始化失败0xc000000d解决办法
- 白帽黑客必备的网络安全基础问答
- 一元享移动怎么样_移动新套餐:18元享“全免流”+1元1G流量,阿里鱼卡要遭殃?...
- Cannot allocate memory
- 迪士尼超级计算机多少钱,上海迪士尼乐园公布票务调整方案,明年1月9日起实行新票价...
- 移动硬盘出现好多类似5b823bbe980da233a005c83a\update的文件,0字节,删不掉
热门文章
- 基于arduino的红外测速
- Android Battery 开发(三) BatteryService
- 拟投资47.7亿!新世界中国拿下南箕村旧改,打造广州城央“明珠”
- 详细的视频追踪检测分类、监控追踪常用数据集
- 相对导入问题解决,ImportError:attempted relative import with no known parent package
- Python进行决策树和随机森林
- Tomcat WAR包部署getshell
- Java程序设计基础(第5版)自研笔记
- 微信公众号 获取菜单无内容 “is_menu_open“ : 0
- html:table表格如何实现斜线表头