信号注册函数sigaction
来源:互联网 发布:咏春拳可以自学吗 知乎 编辑:程序博客网 时间:2024/04/30 06:10
信号注册函数sigaction
sigaction与signal的区别
同样是信号注册处理函数,可以说sigaction是signal的加强版本.sigaction的优势:
1.可以通过信号携带附加信息,配合sigqueue函数使用
2.可以设置信号处理函数时的使用的信号集掩码,sa_mask
3.另外额外功能在 sa_flag中说明
函数说明
int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact) struct sigaction { void (*sa_handler)(int); /*信号回调函数*/ void (*sa_sigaction)(int, siginfo_t *, void *); /*信号回调函数加强*/ sigset_t sa_mask; /*在执行回调函数的信号掩码*/ int sa_flags; /*标志位*/ void (*sa_restorer)(void); }; 结构体说明: 1.void (*sa_sigaction)(int, siginfo_t *, void *); siginfo_t {//信号传递过来的额外信息 sigval_t si_value; /* Signal value */ int si_int; /* POSIX.1b signal */ ...//还有很多 } 2.sa_flags:用来设置信号处理的其他相关操作,下列的数值可用。可用OR 运算(|)组合 A_NOCLDSTOP:如果参数signum为SIGCHLD,则当子进程暂停时并不会通知父进程 SA_ONESHOT/SA_RESETHAND:表示信号处理一旦被调用过,就恢复到默认处理函数 SA_RESTART:被信号中断的系统调用会自行重启,默认打断,如read(),getchar() (signal函数默认重启了) ŸSA_NOMASK/SA_NODEFER:在处理此信号未结束前不理会此信号的再次到来 SA_SIGINFO:信号处理函数是带有三个参数的sa_sigaction (配合sigqueue函数使用)int sigqueue(pid_t pid, int sig, const union sigval value); pid:对应进程 sig:信号 value:信号携带的附加信息 union sigval { int sival_int; void *sival_ptr; };
函数示例
示例说明:
1.验证sa_flags:SA_RESTART
2.信号携带参数
#include <signal.h>#include <stdio.h>#include <errno.h>// 新的信号处理函数void handle(int v, siginfo_t* info, void* p){ printf("recv SIGINT,arg=%d\n",info->si_int);}int main(){ // 默认的signal已经有SA_RESTART这个flag了 //signal(SIGINT, handle); struct sigaction sig; sig.sa_handler = NULL; sig.sa_sigaction = handle; sigemptyset(&sig.sa_mask); // sig.sa_flags = 0; sig.sa_flags = SA_RESTART; // 让阻塞的系统调用,被这个信号打断之后,要重启 sig.sa_restorer = NULL; // 在Linux下没用,直接填NULL就可以了 sigaction(SIGINT, &sig, NULL); union sigval v; v.sival_int=99;//信号携带参数 sigqueue(getpid(),SIGINT,V);//发送携带额外参数的信号。 char buf[1024]; int ret = read(0, buf, sizeof(buf)); // read被中断打断了 printf("ret = %d, errno=%d, EINTR=%d\n", ret, errno, EINTR); // EINTR}
0 0
- 信号注册函数sigaction
- linux sigaction函数(注册信号)使用
- 41-新的信号注册函数 sigaction
- LINUX信号-sigaction更强壮的信号注册函数
- siganl与sigaction注册信号处理函数的区别
- 信号处理函数sigaction()
- 信号函数sigaction说明
- sigaction函数 - 改变信号行为
- sigaction函数 - 改变信号行为
- LINUX信号- sigaction 函数-10.14
- 信号安装函数sigaction与结构体struct sigaction
- Linux下信号处理函数sigaction
- sigaction函数及信号的处理方式
- sigaction函数嵌套处理信号简单介绍
- 信号处理signal与sigaction函数
- Linux 信号(三)sigaction函数
- signal、sigaction,信号集操作函数
- 信号发送函数sigqueue和信号安装函数sigaction
- Nginx内存管理
- 数据库(第一范式,第二范式,第三范式)
- org.gjt.mm.mysql.Driver和com.mysql.jdbc.Driver的区别
- MySQL (四) DCL 用户 权限 增删改查
- SML-Dplab
- 信号注册函数sigaction
- FusionCharts绘图插件(二)——绑定数据源
- 2017.2.14-15自测(那些普及神题)
- hdu 5446 Unknown Treasure (Lucas定理+中国剩余定理)
- 磁盘问题定位与解决
- 【codeforces 765A】Neverending competitions
- 流程以客户为中心
- java ee 乱码问题
- pjmedia高级API实现录音