内核链表实现分析与使用(双向环形链表)
2017-03-02 22:43
302 查看
内核链表实现分析与使用(双向环形链表)
内核对链表进行了封装理解本部分内容需要配合《整理–Misc类设备驱动》这一文中链表的相关使用示例以及基本链表的知识。使用内核链表需要定义一个链表头,然后在需要管理的结构体中内嵌链表节点(通常又叫做链表入口entry,我是觉得挺形象的,更易于理解)
以下内容位于include/linux/List.h
1.链表的初始化
分为链表头的初始化和需要添加的入口entry的初始化
2.入口entry的插入
这里有一些小插曲,一开始,直接把函数参数替换掉展开,头插入的时候发现没有问题,但是尾插入的时候发现有不对劲:
仔细分析__list_add函数,函数形参
struct list_head *prev
struct list_head *next保存了相对于当前要处理的entry的上一个和下一个的struct list_head变量的地址。
简化了问题,更易于理解,头插入和尾插入变成了只要给出对应前后节点对应的地址就能简便处理,和之前的接触过的链表不一样在于以前的链表没有连接成环
3.入口entry的删除
4.遍历链表
container_of宏:https://github.com/TongxinV/oneBook/issues/17
5.还有其他方式不过多赘述
include/linux/List.h
相关文章推荐
- c语言双向循环链表实现-使用内核链表
- 内核链表实现分析与使用
- linux 内核分析之list_head 双向链表结构
- 使用java实现双向链表数据结构
- linux应用编程笔记(2)core dump分析内核链表使用后free出现的错误
- Linux内核分析--内核中的数据结构双向链表续【转】
- Java实现单向双向链表原理分析
- Linux内核2.6.14源码分析-双向循环链表代码分析(巨详细)
- 容器第四课,JDK源代码分析,自己实现LinkedList,双向链表的概念_节点定义
- C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用
- 数据结构-内核的双向循环链表-简单实现
- 如何使用c语言实现双向链表的插入删除操作
- [精华]]Linux内核2.6.14源码分析-双向循环链表代码分析(转)
- Linux2.6.32内核笔记(4)内核链表使用与分析
- 使用netlink机制实现内核空间和用户空间的双向消息通讯
- JAVA实现最简单的双向链表、队列与栈(内部使用链表形式存储)
- 丢手帕问题的双向环形链表实现
- 使用环形链表实现约瑟夫环
- 使用JAVA实现双向链表
- JAVA实现双向链表终极解析!!熟练使用接口