總的來說,timer的用法還是很簡單的。主要需要定義乙個timer_list變數timer、先初始化timer
init_timer(&timer);
then 對timer的相關引數賦值:
timer.function = fun;
timer.expires = jiffies + timer_delay;
add_timer(&timer);
在定時器時間到的時候,會執行fun,如果繼續定時,可以通過
在fun中執行
mod_timer(&timer, jiffies + timer_delay);
在不需要的時候通過呼叫
del_timer(&timer);
刪除定時器。
簡單吧。這樣乙個簡單的定時器就完成了。
呵呵。
附程式:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define second_major 0
static int second_major = second_major;
struct second_dev
;struct second_dev *second_devp;
static void second_timer_handle(unsigned long arg)
int second_open(struct inode *inode, struct file *filp)
int second_release(struct inode *inode, struct file *filp)
static ssize_t second_read(struct file *filp, char __user *buf, size_t count,
loff_t *ppos)
else
}static const struct file_operations second_fops =
;static void second_setup_cdev(struct second_dev *dev, int index)
}int second_init(void)
else
if (ret < 0)
second_devp = kmalloc(sizeof(struct second_dev), gfp_kernel);
if (!second_devp)
memset(second_devp, 0, sizeof(struct second_dev));
second_setup_cdev(second_devp, 0);
return 0;
fail_malloc:
unregister_chrdev_region(devno, 1);
}void second_exit(void)
module_author("song baohua");
module_license("dual bsd/gpl");
module_param(second_major, int, s_irugo);
module_init(second_init);
module_exit(second_exit);
附上使用者端的測試程式:
#include
#include
#include
int main(void)
for(i = 0; i < 20; i++)
close(fd);
}另外一種隱藏lkm的方法
不讓**:
C Linq複雜一點的查詢
using system using system.collections.generic using system.linq public sc scs public course courses public program new student new student new student...
一點一點進步
requestparam,是獲取前端傳遞給後端的引數,可以使get方式,也可以是post方式。若前端傳遞的引數和後端接收的引數名稱不一致,則必須要標註。pathvariable,是獲取get方式,url後面引數,進行引數繫結。1.裝箱就是講基本資料型別轉換為包裝類,拆箱就是自動將包裝類轉換為基本資料...
演算法 複雜了一點點的數字回文
題目描述 藍橋杯 歷屆試題 回文數字 時間限制 1sec 記憶體限制 128mb 提交 6668 解決 2736 題目描述 觀察數字 12321,123321 都有乙個共同的特徵,無論從左到右讀還是從右向左讀,都是相同的。這樣的數字叫做 回文數字。本題要求你找到一些5位或6位的十進位制數字。滿足如下...