我做的程序需要两个定时器,一个用于自动备份,一个用于自动清理所以我觉得用alarm()的话,统一发送SIG_ALRM信号是不行的,所以我采用了structtimer_list和add_timer机制,但是发现要包含linux/timer.h,所以不得不改用模块编程(正好可以深入一下内核),可是发现在内核里包含time.h并调用localtime(),mktime()等函数都不行,后来又改包含linux/time.h,发现那个里面的函数跟time.h不一样,请各位指点一下怎样做。
另外,我对内核模块的编译也很迷糊,希望各位大侠可以耐心指点一下。不胜感谢。我的模块代码和makefile如下,请指正:
#include
#include
#include
#include
#include
staticintbackup_time=0;//模块参数,自动备份时间
staticintclean_time=0;//模块参数,自动清理时间
structtimer_listbackup_timer[2];//全局变量,两个计时器
intDB_BACKUP()
{
return0;
}
intDB_CLEAN()
{
return0;
}
//自动备份函数
voidauto_backup(unsignedlongdata)
{
structtimevalhour;
hour.tv_sec=86400;
hour.tv_usec=0;
intjiffies_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;
}
//自动清理
voidauto_clean(unsignedlongdata)
{
structtimevalhour;
hour.tv_sec=86400;
hour.tv_usec=0;
intjiffies_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;
}
//初始化两个定时器
intset_backup_timer()
{
printk(KERN_ALERT"AutoBackup:%d,AutoClean:%d",backup_time,clean_time);
structtmtm_v;
time_ttime1,time2;
structtimevalhour;
hour.tv_usec=0;
time1=time(NULL);//姹傚嚭褰撳墠鏃堕棿
memcpy((char*)&tm_v,(char*)localtime(&time1),sizeof(structtm));
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))