有谁会用linux里面的定时器timer_list
答案:1 悬赏:30 手机版
解决时间 2021-01-30 12:43
- 提问者网友:椧運幽默
- 2021-01-29 12:03
有谁会用linux里面的定时器timer_list
最佳答案
- 五星知识达人网友:等灯
- 2021-01-29 13:38
这段代码是Linux的一个内核模块程序,timer_list也是Linux内核中的数据结构。模块程序不是以main函数作为入口的。而是以module_init指定。
module_init/module_exit分别用于指定模块的加载和卸载函数。
加载模块(insmod)时,会调用mytimer_init函数。这个函数设置一个定时器,在定时器超时时执行myfunc函数,指定函数参数为“Hello,world!”。
myfunc执行时,会输出“Hello,world!”,mod_timer函数会将定时器重新计时,两秒后到期。
因此整个代码执行起来后的现象就是每两秒输出一次Hello,world!追问“因此整个代码执行起来后的现象就是每两秒输出一次Hello,world!“
那这个输出在什么时候会停止呢?
如果要求在1分钟之后停止数据应该怎么写?追答卸载模块时停止(执行rmmod)。
一分钟后停止,可将myfunc改写为:
static void myfunc(unsigned long data)
{
static int oneminute = 30;
printk("%s\n", (char *)data);
if (oneminute-- > 0)
mod_timer(&mytimer,jiffies + 2*HZ);
}追问这里是不是应该把oneminute设置为全局变量?不然它每次调用myfunc的时候不是值都被置为30。另外因为是每两秒调用一次myfunc,if里面的条件应该也不对。不知道我有没有理解错?
还有一个问题,就是。。。字数限制,麻烦看下我的补充。追答1、你应该补习下C语言,static修饰的局部变量,每次函数调用时,不会被初始化。
2、当然可以,系统中本来就有若干个定时器。
module_init/module_exit分别用于指定模块的加载和卸载函数。
加载模块(insmod)时,会调用mytimer_init函数。这个函数设置一个定时器,在定时器超时时执行myfunc函数,指定函数参数为“Hello,world!”。
myfunc执行时,会输出“Hello,world!”,mod_timer函数会将定时器重新计时,两秒后到期。
因此整个代码执行起来后的现象就是每两秒输出一次Hello,world!追问“因此整个代码执行起来后的现象就是每两秒输出一次Hello,world!“
那这个输出在什么时候会停止呢?
如果要求在1分钟之后停止数据应该怎么写?追答卸载模块时停止(执行rmmod)。
一分钟后停止,可将myfunc改写为:
static void myfunc(unsigned long data)
{
static int oneminute = 30;
printk("%s\n", (char *)data);
if (oneminute-- > 0)
mod_timer(&mytimer,jiffies + 2*HZ);
}追问这里是不是应该把oneminute设置为全局变量?不然它每次调用myfunc的时候不是值都被置为30。另外因为是每两秒调用一次myfunc,if里面的条件应该也不对。不知道我有没有理解错?
还有一个问题,就是。。。字数限制,麻烦看下我的补充。追答1、你应该补习下C语言,static修饰的局部变量,每次函数调用时,不会被初始化。
2、当然可以,系统中本来就有若干个定时器。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯