网站首页 > 物联资讯 > 技术分享

sigaction

2016-09-28 00:00:00 广州睿丰德信息科技有限公司 阅读
睿丰德科技 专注RFID识别技术和条码识别技术与管理软件的集成项目。质量追溯系统、MES系统、金蝶与条码系统对接、用友与条码系统对接

概述编辑

sigaction(查询或设置信号处理方式) 相关函数 signal,sigprocmask() ,sigpendingsigsuspendsigemptyset 表头文件 #include<signal.h> 定义函数 int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact); 函数说明 sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。 如参数结构sigaction定义如下 struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)(void); } 信号处理函数可以采用void (*sa_handler)(int)或void (*sa_sigaction)(int, siginfo_t *, void *)。到底采用哪个要看sa_flags中是否设置了SA_SIGINFO位,如果设置了就采用void (*sa_sigaction)(int, siginfo_t *, void *),此时可以向处理函数发送附加信息;默认情况下采用void (*sa_handler)(int),此时只能向处理函数发送信号的数值。 sa_handler此参数和signal()的参数handler相同,代表新的信号处理函数,其他意义请参考signal()。 sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号集搁置。 sa_restorer 此参数没有使用。 sa_flags 用来设置信号处理的其他相关操作,下列的数值可用。 sa_flags还可以设置其他标志: SA_RESETHAND:当调用信号处理函数时,将信号的处理函数重置为缺省值SIG_DFL SA_RESTART:如果信号中断了进程的某个系统调用,则系统自动启动该系统调用 SA_NODEFER :一般情况下, 当信号处理函数运行时,内核将阻塞该给定信号。但是如果设置了 SA_NODEFER标记, 那么在该信号处理函数运行时,内核将不会阻塞该信号[1]  sigaction

2示例编辑

#include <signal.h> #include <unistd.h> #include <stdio.h> static void int_hander(int s) { printf("Catch a signal sigint\n"); } int main(void) { int i; struct sigaction act, oact; act. sa_handler = int_hander; sigemptyset(&act. sa_mask); //清空此信号集 act. sa_flags = 0; sigaction(SIGINT, &act, &oact); //signal(SIGINT, SIG_IGN); while(1){ for(i=0; i<5; i++){ write(1, ".", 1); sleep(1); } write(1, "\n", 1); } sigaction(SIGINT, &oact, NULL); //恢复成原始状态 return 0; }RFID管理系统集成商 RFID中间件 条码系统中间层 物联网软件集成