2.26sigaction信号捕捉函数

 sigaction比signal的适用环境的范围更广,因此更加推荐使用sigaction来捕捉信号

/*
    #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);
    };

*/
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
//过3s后每隔2s定时一次
void myalarm(int num){
    printf("捕捉到了的信号的编号是:%d\n",num);
    printf("xxxxxxxx\n");
}
int main(){

    struct sigaction act;
    act.sa_flags=0;
    act.sa_handler = myalarm;
    sigemptyset(&act.sa_mask);//清空临时阻塞信号集

    //注册信号捕捉
    sigaction(SIGALRM,&act,NULL);

    struct itimerval new_value;
    //设置值
    new_value.it_interval.tv_sec=2;//设置间隔的时间
    new_value.it_interval.tv_usec=0;

    //设置延迟的时间,3s后开始第一次定时
    new_value.it_value.tv_sec=3;//s
    new_value.it_value.tv_usec=0;//us
    int ret=setitimer(ITIMER_REAL,&new_value,NULL); //非阻塞的
    printf("定时器开始了...\n");
    if(ret==-1){
        perror("setitimer");
        exit(0);
    }

    //getchar();
    while(1);
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值