直接上代码
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/printk.h>
struct mytype {
int val;
struct list_head thelist;
};
struct mytype mytype1 = {
.val = 11,
};
struct mytype mytype2 = {
.val = 12,
};
struct mytype mytype3 = {
.val = 13,
};
struct mytype mytype4 = {
.val = 14,
};
LIST_HEAD(header_task);
static int __init hello_init(void)
{
struct mytype *p;
list_add_tail(&mytype1.thelist, &header_task);
list_add_tail(&mytype2.thelist, &header_task);
list_add_tail(&mytype3.thelist, &header_task);
list_add(&mytype4.thelist, &header_task);
printk(KERN_INFO "start:\n");
list_for_each_entry(p, &header_task, thelist) {
printk(KERN_INFO "%d\n", p->val);
}
printk(KERN_INFO "delete one:\n");
list_del(&mytype2.thelist);
list_for_each_entry(p, &header_task, thelist) {
printk(KERN_INFO "%d\n", p->val);
}
return 0;
}
static void __exit hello_exit(void)
{
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
运行结果
$ insmod helloworld.ko
start:
14
11
12
13
delete one:
14
11
13