Linux内核链表简单应用
#include<linux/init.h>
#include<linux/module.h>
#include<linux/list.h>
/*Linux内核中有list_head原型如下
struct list_head
{
struct list_head *next, *prev;
};
*/
//创建一个结构体保存学生信息
struct score
{
int num;
int math;
int eng;
struct list_head list;
};
struct score stu1,stu2,stu3;
struct list_head score_head;
struct list_head *pos;
struct score *tmp;
MODULE_LICENSE("GPL"); //申明遵守的许可证协议
MODULE_AUTHOR("XRJ"); //申明作者
MODULE_DESCRIPTION("First Module Program!"); //功能描述
MODULE_VERSION("V1.0"); //程序版本
static int mylist_init(void)
{
INIT_LIST_HEAD(&score_head); //Linux内核API创建链表
stu1.num=1;
stu1.math=90;
stu1.eng=80;
list_add_tail((&stu1.list),&score_head); //Linux内核API插入链表尾部
stu2.num=2;
stu2.math=100;
stu2.eng=80;
list_add_tail((&stu2.list),&score_head); //Linux内核API插入链表尾部
stu3.num=3;
stu3.math=60;
stu3.eng=99;
list_add_tail((&stu3.list),&score_head); //Linux内核API插入链表尾部
list_for_each(pos,&score_head); //Linux内核API遍历链表
{
tmp=list_entry(pos,struct score,list);
printk("num %d,eng is %d,math is %d\n",tmp->num,tmp->eng,tmp->math);
}
return 0;
}
static void mylist_exit(void)
{
list_del(&(stu1.list)); //Linux内核API链表节点删除
list_del(&(stu2.list)); //Linux内核API链表节点删除
list_del(&(stu3.list)); //Linux内核API链表节点删除
}
module_init(mylist_init);
module_exit(mylist_exit);
评论