内核学习——1、list_head

双向循环链表:list_head

头节点head是不使用的:

struct list_head {

struct list_head *next, *prev;

};

结构体中没有数据域,所以一般把list_head嵌入到其他结构中使用

struct file_node {

char c;

struct list_head node;

};

此时,list_head就作为它父结构体中的一个成员了,我们知道list_head的地址(指针)时,就可以通过list_entry来获得它的父结构的地址

#define list_entry(ptr, type, member) container_of(ptr,type,member)

通过结构体成员地址来求得结构体地址:ptr是所求结构体中的list_head成员指针,type是所求结构体类型,member是结构体list_head成员名

list_for_each:遍历双向链表

LIST_HEAD():生成双向链表头节点

list_add():插入操作

list_del():删除操作

list_empty():判断是否为空

相关推荐
小弥儿2 小时前
GitHub今日热榜 | 2026-09-15:AI 智能体与本地生成工具领跑
学习·开源
susplus2 小时前
【初识ARM】ARM相关基础概念
学习·arm
XiHongShi20162 小时前
键盘大小写指示器(代替键盘灯)
学习·计算机
斯维赤3 小时前
AI Agent学习之路 | Prompt Engineering(提示词工程)的三板斧核心技巧
人工智能·学习·prompt
2301_802651086 小时前
imx6ull裸机开发:UART
学习
辣知6 小时前
辣知·化智56 良渚神权与夏朝颠覆
学习
dadaobusi7 小时前
学习:三层交换机
学习
笨鸟先飞的橘猫7 小时前
树结构在游戏行业中的应用
学习·游戏
yangmu32038 小时前
从显像管到Micro-LED:屏幕的光之进化
学习·显示器
DYWorker0018 小时前
Linux驱动子系统:DMA子系统 —— Consumer和Provider(006)
linux·驱动开发