Linux内核链表
《内核链表》
内核链表即,我么在一个链表中插入或删除一个数据,都需要自己编写代码,相当的麻烦,怎么解决这个问题呢,为了更加方便的解决这个问题,linux中就产生了内核链表,以后想要在链表中插入数据或删除数据时,只需要调用函数就可以了。
<链表对比>
链表是一种数据结构,他通过指针将一系列的数据节点连接成一条数据链,相对于数组,链表更具有更好地 动态性,建立链表时,无需知道链表的总数量,可以随机分配空间,可以高效的在链表中插入和删除数据,链表的开销主要是访问的顺序性和组织链的损失。
传统双向量表:
指针是指向下一个节点的数据
linux内核链表:
指针指向下一个节点的指针域。
<内核链表使用>
1)内核链表结构
struct list_head
{
struct list_head *pre,*next;
}
由此可见,链表具有双向功能。
2)内核链表函数
INIT_LIST_HEAD():创建链表
list_add():在表头插入节点
list_add_tail():在链表为插入节点
list_del():删除节点
list_entry():取出节点
list_for_each():遍历节点
<内核链表实现分析>
首先包含头文件<linux/list.h>
使用函数:
INIT_LIST_HEAD() 创建一个列表,接下来就是调用函数 list_add_tail(),旺该节点插入节点。就是这么个原理。
<移植内核链表>
将头文件,和相应的实现代码移植到应用程序中,本身是一个内核的实现代码
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">