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

相关推荐
代码小将6 分钟前
java中static学习笔记
java·笔记·学习
虾球xz13 分钟前
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
开发语言·c++·物联网·学习
Y3174291 小时前
python Day46 学习(日志Day15复习)
python·学习·机器学习
学不会就看1 小时前
selenium学习实战【Python爬虫】
python·学习·selenium
CIb0la2 小时前
Ai自动补全编程工具:llama vscode
运维·开发语言·学习·测试工具·程序人生
2301_804774492 小时前
回溯算法学习
学习
~Yogi2 小时前
今日学习:工程问题(场景题)
android·学习
电子云与长程纠缠2 小时前
Houdini POP入门学习07 - 分组
学习·houdini
Auscy2 小时前
JavaScript 数组学习总结
开发语言·javascript·学习
虾球xz2 小时前
CppCon 2015 学习:Transducers, from Clojure to C++
开发语言·c++·学习