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函数的使用相关推荐

  1. Linux信号实现精确到微秒的sleep函数:通过sigsuspend函数解决时序竞态问题

    原理就是先使用定时器定时,然后再使用pause函数或者sigsuspend函数主动阻塞挂起,最终恢复现场. 如果使用pause函数的话,优点是使用简单,缺点是有可能产生时序竞态,导致进程一直阻塞下去: ...

  2. Unix/Linux编程:竞态条件与sigsuspend函数

    利用pause和alarm函数实现sleep #include <unistd.h>int pause(void); pause函数使调用进程挂起直到有信号到达.如果信号的处理动作是终止进 ...

  3. linux c语言内核函数手册,Linux C函数实例速查手册

    函数学习目录: 第1章 初级I/O函数 1.1 close函数:关闭已经打开的文件 1.2 creat函数:创建一个文件 1.3 dup函数:复制文件描述符 1.4 dup2函数:复制文件描述符到指定 ...

  4. 时序竟态条件分析 sigsuspend函数 Linu系统编程

    简单的自定义sleep函数 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include< ...

  5. Linux系统函数之IO函数

    技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.标准C库IO函数工作流程 IO缓冲区的作用? 大部分硬盘都是机械硬盘,读取寻道时间 ...

  6. linux计时函数的使用

    linux计时函数的使用 linux下计时函数的使用目的是测量程序运行的时间 头文件 #include <sys/time.h> 计时函数 int gettimeofday(struct ...

  7. linux C函数之strdup函数分析【转】

    本文转载自:http://blog.csdn.net/tigerjibo/article/details/12784823 linux C函数之strdup函数分析 一.函数分析 1.函数原型: [c ...

  8. Linux getopt()函数 getopt_long()函数---转

    http://hi.baidu.com/scoundrelgg/item/d4083f8412eea05d26ebd97f Linux getopt()函数 getopt_long()函数 get_o ...

  9. linux shell函数

    linux shell函数

  10. Linux信号处理函数可中断么,linux中关于信号处理笔记(一)

    #include static void sig_quit(int); int main(void) { sigset_t newmask, oldmask, pendmask; if(signal( ...

最新文章

  1. 开源版本_重磅!阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell
  2. oracle生成xml格式化,介绍关于Oracle下存取XML格式数据的方式教程一览
  3. excel如何匹配同名数据_Excel如何查找名字重复的数据
  4. 关系代数——附加的关系运算(1)
  5. MYSQL数据库应用优化
  6. python灰度图像为什么显示成彩色的_python opencv image 怎么变成伪彩色
  7. 数据反正模拟 matlab,[2018年最新整理]信号处理MATLAB函数.doc
  8. 用asp.net实现微博系统_微信几亿人在线的点赞、取消点赞系统,用Redis如何实现?...
  9. 多目标进化优化_科研一角|论文分享 | 等离子喷焊工艺参数多目标优化
  10. Lazyload 延迟加载效果(转载)
  11. JS Date.Format
  12. 2020美赛回忆录|平生第一次打美赛的获奖方式......美赛准备方法和思想
  13. dstwo linux 模拟器,dstwo md模拟器使用图文教程
  14. 三调业务摘要201709
  15. 使用opencv应用程序正常初始化失败0xc000000d解决办法
  16. 白帽黑客必备的网络安全基础问答
  17. 一元享移动怎么样_移动新套餐:18元享“全免流”+1元1G流量,阿里鱼卡要遭殃?...
  18. Cannot allocate memory
  19. 迪士尼超级计算机多少钱,上海迪士尼乐园公布票务调整方案,明年1月9日起实行新票价...
  20. 移动硬盘出现好多类似5b823bbe980da233a005c83a\update的文件,0字节,删不掉

热门文章

  1. 基于arduino的红外测速
  2. Android Battery 开发(三) BatteryService
  3. 拟投资47.7亿!新世界中国拿下南箕村旧改,打造广州城央“明珠”
  4. 详细的视频追踪检测分类、监控追踪常用数据集
  5. 相对导入问题解决,ImportError:attempted relative import with no known parent package
  6. Python进行决策树和随机森林
  7. Tomcat WAR包部署getshell
  8. Java程序设计基础(第5版)自研笔记
  9. 微信公众号 获取菜单无内容 “is_menu_open“ : 0
  10. html:table表格如何实现斜线表头