0基础学习 signal()信号捕捉函数(内附C语言源码)

#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum,sighandler_t handler);

-功能:设置某个信号的捕捉行为

-参数:

-signum:要捕捉的信号;

-handler:捕捉到信号要如何处理

        -SIG_IGN:忽略信号

        -SIG_DFL:使用信号默认的行为

 -回调函数:这个函数是内核调用,程序员只负责写,捕捉到信号后如何去处理信号。

        -需要程序员实现,提前准备好,函数类型根据实际需求,看函数指针的定义。

        -不是程序员调用,而是当信号产生,由内核调用

        -函数指针是实现回调的手段,函数实现之后,将函数名放到函数指针的位置即可。

-返回值:

        成功,返回上一次注册的信号处理函数的地址,第一次调用返回NULL

        失败,返回SIG_ERR,设置错误号。

注意:SIGKILL SIGSTOP不能被捕捉,不能被忽略。

明白了上述各个指令的意思后就可以书写代码了。

以下代码实现的功能是首先发送一个信号“开始计时了...”,然后等待3秒后,每2秒发送一次信号“捕捉到的信号是:14.XXXXXXX”.

  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         signal(SIGALRM,show);
 15         struct itimerval new_val;
 16         //设置间隔时间
 17         new_val.it_interval.tv_sec=2;
 18         new_val.it_interval.tv_usec=0;
 19         //设置延长时间,3秒之后第一次定时
 20         new_val.it_value.tv_sec=3;
 21         new_val.it_value.tv_usec=0;
 22         int val=setitimer(ITIMER_REAL,&new_val,NULL);//非阻塞
 23         if(val==-1)
 24         {
 25                 perror("setitimer");
 26                 exit(0);
 27         }
 28         printf("开始计时了...\n");
 29         while(1)
 30         {}
 31         return 0;
 32 }

输出结果为:

 觉得不错就点个赞吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值