内核学习——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():判断是否为空

相关推荐
雾岛听风眠12 分钟前
PID算法学习笔记
笔记·学习
xian_wwq15 分钟前
【学习笔记】打造可复现、可评测、可迭代的AI技术体系
笔记·学习·ai
2401_8345170740 分钟前
AD学习笔记-35 多层线路和装配图的导出
笔记·学习
嗷嗷哦润橘_1 小时前
AI Agent学习:MetaGPT项目之RAG
人工智能·python·学习·算法·deepseek
Radan小哥1 小时前
Docker学习笔记—day012
笔记·学习·docker
Gavin在路上2 小时前
AI学习之Anthropic的访谈者工具
人工智能·学习
AA陈超3 小时前
LyraStarterGame_5.6 Experience系统加载流程详细实现
c++·笔记·学习·ue5·虚幻引擎·lyra
秋深枫叶红3 小时前
嵌入式第三十四篇——linux系统编程——进程
linux·服务器·数据库·学习
普通网友4 小时前
深入探讨Linux驱动开发:字符设备驱动开发与测试_linux 驱动开发设备号(2)
java·linux·驱动开发
martian6654 小时前
深入解析C++驱动开发实战:优化高效稳定的驱动应用
开发语言·c++·驱动开发