linux alarm 的使用

#include<sys/time.h>
#include<time.h>
#include <signal.h>

第一种:

void timer_handler(int m){
	count++;
	printf("m: %d count:%d \n",m,count);
} 
  
void set_timer()  
{
    struct itimerval itv;  

    itv.it_value.tv_sec = 1;    //timer will start after one seconds later  
    itv.it_value.tv_usec = 0;  

    itv.it_interval.tv_sec = 1;  //run timer_handler at this time  after timer started 
    itv.it_interval.tv_usec = 0;  

    setitimer(ITIMER_REAL,&itv,NULL);  
}  
signal(SIGALRM,timer_handler);  
set_timer();

第二种:使用:sigaction 结构体以及函数
//内核中的定义

typedef void __signalfn_t(int);
typedef __signalfn_t __user *__sighandler_t;

struct sigaction {
#ifndef __ARCH_HAS_IRIX_SIGACTION
	__sighandler_t	sa_handler;
	unsigned long	sa_flags;
#else
	unsigned int	sa_flags;
	__sighandler_t	sa_handler;
#endif
#ifdef __ARCH_HAS_SA_RESTORER
	__sigrestore_t sa_restorer;
#endif
	sigset_t	sa_mask;	/* mask last for extensibility */
};
//内核系统调用 sigaction函数:
asmlinkage long sys_sigaction(int, const struct old_sigaction __user *,
				struct old_sigaction __user *);
				
执行函数:
int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact)

使用sigaction结构体和函数:

void map_timer_handler()  
{  
    
	 struct sigaction sig_act;
	 sig_act.sa_handler = timer_handler;
	 sigemptyset(&sig_act.sa_mask);
         sig_act.sa_flags = 0;
	 sigaction(SIGALRM, &sig_act, NULL);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

john_liqinghan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值