linux 内核模块 定时器,linux内核定时器__backup_timer_hour_struct_定时器_模块__169IT.COM...

我做的程序需要两个定时器,一个用于自动备份,一个用于自动清理所以我觉得用alarm()的话,统一发送SIG_ALRM信号是不行的,所以我采用了struct timer_list和add_timer机制,但是发现要包含linux/timer.h,所以不得不改用模块编程(正好可以深入一下内核),可是发现在内核里包含time.h并调用localtime(),mktime()等函数都不行,后来又改包含linux/time.h,发现那个里面的函数跟time.h不一样,请各位指点一下怎样做。

另外,我对内核模块的编译也很迷糊,希望各位大侠可以耐心指点一下。不胜感谢。我的模块代码和makefile如下,请指正:

#include

#include

#include

#include

#include

static  int  backup_time=0;                            //模块参数,自动备份时间

static  int  clean_time=0;                             //模块参数,自动清理时间

struct  timer_list  backup_timer[2];                   //全局变量,两个计时器

int   DB_BACKUP()

{

return  0;

}

int  DB_CLEAN()

{

return  0;

}

//自动备份函数

void  auto_backup(unsigned long data)

{

struct  timeval  hour;

hour.tv_sec=86400;

hour.tv_usec=0;

int   jiffies_t=tvtojiffies(&hour);

//设置第一个计时器

backup_timer[0].expires=jiffies_t;

backup_timer[0].data=1;

backup_timer[0].function=DB_BACKUP;

add_timer(&backup_timer[0]);

//实现备份功能

DB_BACKUP();

return;

}

//自动清理

void  auto_clean(unsigned long data)

{

struct  timeval  hour;

hour.tv_sec=86400;

hour.tv_usec=0;

int   jiffies_t=tvtojiffies(&hour);

//设置自动清理定时器

backup_timer[1].expires=jiffies_t;

backup_timer[1].data=0;

backup_timer[1].function=DB_CLEAN;

add_timer(&backup_timer[1]);

DB_CLEAN();

return;

}

//初始化两个定时器

int  set_backup_timer()

{

printk(KERN_ALERT "Auto Backup:%d,Auto Clean:%d",backup_time,clean_time);

struct  tm  tm_v;

time_t  time1,time2;

struct  timeval  hour;

hour.tv_usec=0;

time1=time(NULL);                                            //姹傚嚭褰撳墠鏃堕棿

memcpy((char *)&tm_v,(char *)localtime(&time1),sizeof(struct tm));

tm_v.tm_min=0;

tm_v.tm_sec=0;                                               //鍚屼笂

tm_v.tm_hour=backup_time;

time2=mktime(&tm_v);

if((hour.tv_sec=difftime(time2,time1))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值