设为首页 加入收藏

TOP

Linux设备驱动工程师之路——内核链表的使用
2014-11-24 11:55:10 来源: 作者: 【 】 浏览:1
Tags:Linux 设备驱动 工程师 内核 使用

一、重要知识点


1.内核链表和普通链表的区别


内核链表是一个双向链表,但是与普通的双向链表又有所区别。内核链表中的链表元素不与特定类型相关,具有通用性。


我们先来看一幅图



kernel list展示的是内核链表的结构,normallist展示的是普通链表的结构。head是链表头,p1,p2,p3是链表节点。从图中可以看出普通链表的p1的next指针是指向的结构体p2的地址,p2的pre指针指向p1结构体的地址。而内核链表的p1的next指向的是p2结构体中包含pre和next部分的地址,的p2的pre指向的是p1结构体中包含pre和next部分的地址。依此类推,这就是区别。内核结构元素不与特定类型结构相关,任何结构体都可通过内核的添加成为链表中的节点。


2.内核链表的具体操作


链表数据结构的定义


structlist_head


{


struct list_head *next, *prev;
}


初始化链表头


INIT_LIST_HEAD(list_head*head)


插入节点


list_add(structlist_head *new, struct list_head *head)


list_add_tail(structlist_head *new, sturct list_head *head)


第一个函数在head后面插入一个节点


第二个函数在链表尾部插入一个节点


删除节点:


list_del(structlist_head *entry)


提取数据结构:


list_entry(ptr,type, member)


ptr为已知节点指针ptr,type为节点结构体类型,member为节点指针的type结构体中的名字。返回type结构体的指针。


遍历:


list for each(structlist_head *ops, struct list_head *head)


从head开始遍历每个节点,节点指针保存在ops里面。


二、实例


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇升级Android内置apk版本 下一篇Linux设备驱动工程师之路——硬件..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何从内核协议栈到 (2025-12-27 03:19:09)
·什么是网络协议?有哪 (2025-12-27 03:19:06)
·TCP/ IP协议有哪些 (2025-12-27 03:19:03)
·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)