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

相关推荐
lisw058 小时前
“科学前沿极限突破计划”述评!
大数据·人工智能·学习
外收内放8 小时前
数据分析(数据清洗)
python·学习·数据分析
一条泥憨鱼8 小时前
【计算机网络】| 详解链路层:MAC 地址与VLAN
网络·学习·计算机网络
燕落南枝9 小时前
C 语言学习大总结:从入门到进阶的完整知识体系
服务器·c语言·学习
科技林总9 小时前
从零开始学习DeerFlow完整路径
学习
David猪大卫9 小时前
【C++修炼】STL容器—模板进阶:非类型模板参数、模板特化、模板分离编译
c语言·开发语言·c++·经验分享·笔记·学习·面试
lhh_qrsly9 小时前
三、三相霍尔传感器(BLDC / 带霍尔 PMSM)
驱动开发
幼儿园蛋小黄10 小时前
嵌入式学习总结:从 I2C 到 SPI 的驱动开发实战
驱动开发·学习
老当益壮梁奶奶10 小时前
驱动学习(二):从零开始:驱动工程搭建与字符设备驱动框架详解(基于IMX6ULL)
c语言·arm开发·驱动开发·嵌入式硬件·学习