linux内核链表的使用例子
#include #include #include #include #include #include MODULE_LICENSE("GPL"); MODULE_AUTHOR("wzt"); typedef struct list_test_struct { int count; struct list_head list; }node; struct list_head head_list; rwlock_t list_lock = RW_LOCK_UNLOCKED; void creat_list(void) { node *s = NULL; int i = 0; for (i = 0; i < 10; i++) { s = (node *)kmalloc(sizeof(node), GFP_ATOMIC); if (!s) return ; s->count = i; write_lock(&list_lock); list_add_tail(&(s->list), &head_list); write_unlock(&list_lock); } } void del_data(void) { node *s; struct list_head *p; write_lock(&list_lock); list_for_each(p, &head_list) { s = list_entry(p, node, list); if (s->count == 5) { list_del(p); write_unlock(&list_lock); return ; } } write_unlock(&list_lock); } void print_list(void) { node *s; struct list_head *p; read_lock(&list_lock); list_for_each(p, &head_list) { s = list_entry(p, node, list); printk("%d,", s->count); } write_lock(&list_lock); } int list_test_init(void) { INIT_LIST_HEAD(&head_list); creat_list(); print_list(); del_data(); print_list(); return 0; } void list_test_exit(void) { } module_init(list_test_init); module_exit(list_test_exit);