算法与数据结构之十----内核中的链表操作学习

/****************************************************************
文件内容:内核之链队操作
版本V1.0
作者:HFL
时间:2013-12-22
说明:用户态中链表每个节点包含数据域和指针域,而内核态是每个数据中包含链表
因此内核态链表一般是嵌套在某个包含数据成员的结构体来实现。
内核的链表应用非常广泛:进程管理,定时器,工作队列,运行队列。总之
内核对于多个数据的组织和多个熟悉的描述都是通过链表串起来的。


 *****************************************************************/ 
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/list.h>

MODULE_DESCRIPTION("My Module");
MODULE_ALIAS("My module");
MODULE_LICENSE("GPL");
MODULE_AUTHOR("HFL21014");


struct student
{
    char name[100];
    int counter;
    struct list_head list;
};


struct student *Mystudent;
struct student *Temp_student;
struct list_head student_list;
struct list_head *pos;


int Kernel_list_init()
{
int j = 0;

INIT_LIST_HEAD(&student_list);

Mystudent = kmalloc(sizeof(struct student)*5,GFP_KERNEL);
memset(Mystudent,0,sizeof(struct student)*5);

for(j=0;j<5;j++)
{
       sprintf(Mystudent[i].name,"Student%d",j+1);
      Mystudent[j].counter = j+1; 
    list_add( &(Mystudent[j].list), &student_list);



list_for_each(pos,&student_list) //遍历整个内核链表,pos其实就是一个for循环标量。中间临时使用,既不输入也不输出
{
Temp_student = list_entry(pos,struct student,list); 
printk("hello,my student %d  name: %s\n",Temp_student->counter,Temp_student->name);
}

return 0;
}




void Kernel_list_exit()
{
int k ;
/* 模块卸载是要删除链表,并释放内存 */
for(k=0;k<10;jk++)
{
list_del(&(Mystudent[k].list));     
}

kfree(Mystudent);
}


module_init(Kernel_list_init);

module_exit(Kernel_list_exit);


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江海细流

如该文章对你有帮助,请支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值