ID482769950

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);

评论