/*
#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 不能被捕捉和忽略
*/
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
//过3s后每隔2s定时一次
void mealarm(int num){
printf("捕捉到了的信号的编号是:%d\n",num);
printf("xxxxxxxx\n");
}
int main(){
//注册信号捕捉
//signal(SIGALRM,SIG_IGN);
//signal(SIGALRM,SIG_DFL);
// void (*sighandler_t)(int);函数指针,int类型的参数表示捕捉到的信号的值
signal(SIGALRM,mealarm);//函数指针
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();
return 0;
}
2.23signal信号捕捉函数
最新推荐文章于 2024-04-02 17:40:47 发布
本文档提供了一个C语言示例,演示如何使用`signal`函数设置信号处理程序以及`setitimer`函数创建定时器。程序会在接收到SIGALRM信号时触发回调函数`mealarm`,该函数每两秒打印一次信息,首次在三秒后启动。通过这个例子,读者可以理解如何在C程序中处理和响应信号以及设定定时任务。

2289

被折叠的 条评论
为什么被折叠?



