0基础学会sigaction()函数(内附C语言代码哦)

#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()是一样的。点个赞吧。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值