赞
踩
一、内核链表的基本思想
linux内核链表是使用C语言实现的通用链表,为双向循环链表,可以方便的移植使用。它的基本思想是将数据域和指针域分开,内核链表实现的一系列增、删、改、查操作就是针对指针域的,而数据域则由内核链表的使用者根据实际需求自行完成。这样一来,内核链表便可以实现通用,而应用程序则可以不用关心链表底层操作的实现,感觉上有点类似C++继承机制。
二、内核链表源码
可从linux内核源码中提取,只需要拷贝list.h一个文件即可,网上也有不少版本,不过整体的思想是一致的。
三、部分关键源码
1、指针域结构体类型定义
typedef struct list_head {
struct list_head *next, *prev;
}list_head_t;
链表中所存储的元素就是这个结构体所包含的内容,只有指针域而没有数据域,具体如何使用我们下面在具体的实例中探索。
2、链表头结点初始化
#define INIT_LIST_HEAD(ptr) do { \
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)
3、两个节点之间插入元素
static inline void __list_add(struct list_head *nw,
struct list_head *prev,
struct list_head *next)
{
next->prev = nw;
nw->next = next;
nw->prev = prev;
prev->
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。