#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/list.h>
module_license("gpl");
module_author("david xie");
module_description("list module");
module_alias("list module");
struct student
{
char name[100];
int num;
struct list_head list;
};
struct student *pstudent;
struct student *tmp_student;
struct list_head student_list;
struct list_head *pos;
int mylist_init(void)
{
int i = 0;
init_list_head(&student_list);
pstudent = kmalloc(sizeof(struct student)*5,gfp_kernel);
memset(pstudent,0,sizeof(struct student)*5);
for(i=0;i<5;i++)
{
sprintf(pstudent.name,"student%d",i+1);
pstudent.num = i+1;
list_add( &(pstudent.list), &student_list);
}
list_for_each(pos,&student_list)
{
tmp_student = list_entry(pos,struct student,list);
printk("<0>student %d name: %s/n",tmp_student->num,tmp_student->name);
}
return 0;
}
void mylist_exit(void)
{
int i ;
for(i=0;i<5;i++)
{
list_del(&(pstudent.list));
}
kfree(pstudent);
}
module_init(mylist_init);
module_exit(mylist_exit);