C语言信号集处理函数
来源:互联网 发布:mac电脑pdf转换成ppt 编辑:程序博客网 时间:2024/05/17 01:09
信号
内核和用户空间通信,软件上对中断机制的模拟,异步通信
信号是内核产生
信号的发送(用户空间用kill( 信号, pid) 、 raise(信号))
捕获 ( SIG_IGN, 自定义的信号处理函数 ,SIG_DFL)
一些常用信号
SIGQUIT CTRL+\
SIGINT CTRL+C
SIGSTOP 暂停 --- 不能更改信号处理方式
SIGKILL 终止 --- 不能更改信号处理方式
SIGALRM alarm函数
SIGHUP 关闭终端的时候
SIGTSTP CTRL+Z
SIGCHLD --- 子进程结束时候
SIGPIPE --- 管道不能写的时候产生
信号处理函数
signal()---- 简单
sigaction () --- 信号集,功能比较强大,可以传送信号的信息signal(SIGINT , func);
struct sigaction *restrict old ;
---> sigaction (SIGINT , func , old);
old里面存放的是在该进程中sigint之前的信号处理函数, 这里可能就是SIG_DFL
sigemptyset() ---- 清空信号集
sigaddset ()(对应的信号集, 对应的信号值)--- 单独设置一个对应信号
sigfillset () ----- 直接设置信号集
sigdelset () ---- 从信号集里面删除其中一个信号
sigpending() ---- 判断信号是否屏蔽
sigsuspend() ---- 取消屏蔽
sigpromask () ---- 在进程某一个时间段去把一个信号屏蔽掉
sigaction() ---- 检测并修改信号处理 ,设置信号处理函数,保留之前的信号处理操作
实例:
#include <unistd.h>#include <signal.h>#include <sys/types.h>#include <stdlib.h>#include <stdio.h>void handler(int sig){printf("Handle the signal %d\n", sig);}int main(){sigset_t sigset;//用于记录屏蔽字sigset_t ign;//用于记录被阻塞的信号集struct sigaction act;//清空信号集sigemptyset(&sigset);sigemptyset(&ign);//向信号集中添加信号SIGINTsigaddset(&sigset, SIGINT);// 2 对应修改第1位 (2 1 0) --1-//向信号集中添加信号SIGQUIT//sigaddset(&sigset, SIGQUIT); // 3 对应修改第2位 -1--//设置处理函数和信号集act.sa_handler = handler;sigemptyset(&act.sa_mask);act.sa_flags = 0;sigaction(SIGINT, &act, 0); // signal函数传不了信号信息printf("1st Wait the signal SIGINT...\n");pause();//挂起进程,等待信号//设置进程屏蔽字,在本例中为屏蔽SIGINT、SIGQUITsigprocmask(SIG_SETMASK, &sigset, 0);printf("sigset = 0x%x \n",*(int *)(&sigset));printf("Please press Ctrl+c in 10 seconds...\n");sleep(10);//测试有没有信号是否被屏蔽sigpending(&ign); // 有没有信号处于pendingif(sigismember(&ign, SIGINT))// 如果屏蔽的信号里面有SIGINTprintf("The SIGINT signal has ignored\n");elseprintf("no SIGINT signal\n");//在信号集中删除信号SIGINTsigdelset(&sigset, SIGINT);printf("2nd Wait the signal SIGINT...\n");//将进程的屏蔽字重新设置,即取消对SIGINT、SIGQUIT的屏蔽//并挂起进程sigsuspend(&sigset);printf("The app will exit in 5 seconds!\n");sleep(5);exit(0);}
0 0
- C语言信号集处理函数
- linux C语言 信号处理函数
- C语言信号处理
- 【C语言】【unix c】改变信号的处理函数
- Linux下C语言编程--信号处理函数
- Linux下C语言编程--信号处理函数
- Linux下C语言编程--信号处理函数
- Linux下C语言编程 -- 信号处理函数
- Linux下C语言编程--信号处理函数
- Linux下C语言编程--信号处理函数
- Linux下C语言编程--信号处理函数
- Linux下C语言编程--信号处理函数
- Linux下C语言编程--信号处理函数
- Linux下C语言编程--信号处理函数
- linux下C 信号集处理函数
- C语言sigemptyset()函数:初始化信号集
- C语言中的信号处理
- C语言 信号处理机制
- PostGreSQL 之服务器配置
- B\S备忘录29——MVC3下的JS、CSS合并
- java:IO流学习小结
- #pragma与_Pragma的区别
- c语言指针和引用实现原理深入分析
- C语言信号集处理函数
- 智能指针
- bzoj 2824: [AHOI2012]铁盘整理
- OCPV13.02-638
- StoryBoard和代码结合 按比例快速兼容iPhone6/6 Plus教程
- 调整数组顺序使奇数位于偶数前面
- 三级联动
- iOS8下,如何去掉系统自带的滑动返回手势?
- Largest Point(2015年吉林网络赛)