当前位置:   article > 正文

内核链表的用法_内核链表的使用

内核链表的使用

一、内核链表的基本思想
linux内核链表是使用C语言实现的通用链表,为双向循环链表,可以方便的移植使用。它的基本思想是将数据域和指针域分开,内核链表实现的一系列增、删、改、查操作就是针对指针域的,而数据域则由内核链表的使用者根据实际需求自行完成。这样一来,内核链表便可以实现通用,而应用程序则可以不用关心链表底层操作的实现,感觉上有点类似C++继承机制。
二、内核链表源码
可从linux内核源码中提取,只需要拷贝list.h一个文件即可,网上也有不少版本,不过整体的思想是一致的。
三、部分关键源码
1、指针域结构体类型定义

typedef struct list_head {
   
	struct list_head *next, *prev;
}list_head_t;
  • 1
  • 2
  • 3
  • 4

链表中所存储的元素就是这个结构体所包含的内容,只有指针域而没有数据域,具体如何使用我们下面在具体的实例中探索。
2、链表头结点初始化

#define INIT_LIST_HEAD(ptr) do { \
	(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)
  • 1
  • 2
  • 3

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->
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/128071
推荐阅读
相关标签
  

闽ICP备14008679号