#include <signal.h>
int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact);
-功能:检查或者改变信号的处理。信号捕捉
-参数:
-signum:需要捕捉的信号编号或者宏值(信号的名称)
-act:捕捉到信号之后的处理动作
-oldact:上一次对信号捕捉相关设置,一般不使用,传递NULL。
-返回值:
成功:0
失败:-1
struct sigaction{
//函数指针,指向的函数就是信号捕捉到之后的处理函数
void (*sa_handler)(int);
//不常用
void (*sa_sigaction)(int,siginfo_t *,void *);
//临时阻塞信号集,在信号捕捉函数执行过程中,临时阻塞某些信号
sigset_t sa_mask;
//使用一个信号处理对捕捉到信号进行处理
//这个值可以是0,表示使用sa_handler,也可以是SA_SIGINFO表示使用sa_sigaction
int sa_flags;
//被废弃掉了
void (*sa_restorer)(void);
}
所以,接下来我们就一起来看代码
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/time.h>
4 #include <unistd.h>
5 #include <signal.h>
6 void show(int num)
7 {
8 printf("捕捉到的信号是:%d\n",num);
9 printf("XXXXXXXXX\n");
10
11 }
12 int main()
13 {
14 struct sigaction act;
15 act.sa_flags=0;
16 act.sa_handler=show;
17 sigemptyset(&act.sa_mask);//临时阻塞某些信号
18 int ret=sigaction(SIGALRM,&act,NULL);
19 if(ret==-1)
20 {
21 perror("sigaction");
22 exit(0);
23 }
24 struct itimerval new_val;
25 //设置间隔时间
26 new_val.it_interval.tv_sec=2;
27 new_val.it_interval.tv_usec=0;
28 //设置延长时间,3秒之后第一次定时
29 new_val.it_value.tv_sec=3;
30 new_val.it_value.tv_usec=0;
31 int val=setitimer(ITIMER_REAL,&new_val,NULL);//非阻塞
32 if(val==-1)
33 {
34 perror("setitimer");
35 exit(0);
36 }
37 printf("开始计时了...\n");
38 while(1)
39 {}
40 return 0;
41 }
所以,你看,这个函数的作用跟signal()是一样的。点个赞吧。