Linux内核通用链表

Linux 内核中广泛使用一种高效、通用的双向链表结构,称为 通用链表(Generic Linked List)。它定义在 <linux/list.h> 中,设计灵活、性能高,常用于内核各种子系统中(如进程调度、驱动、文件系统等)。

一、基本结构定义

struct list_head {
    struct list_head *next, *prev;
};

  • 是一个双向循环链表节点结构
  • 不存储具体数据,仅用于链接。

二、如何使用通用链表

Linux 内核的链表设计采用**“容器嵌套”的方式**,也就是在自己的结构体中嵌套一个 list_head 成员。

示例:定义一个数据结构并加入链表

#include <linux/list.h>
#include <linux/slab.h>

struct my_node {
    int data;
    struct list_head list;  // 内核链表节点
};

struct list_head my_list;   // 链表头

三、初始化链表头

INIT_LIST_HEAD(&my_list);

或在定义时初始化:

LIST_HEAD(my_list);  // 宏定义方式

四、添加元素到链表

struct my_node *new_node = kmalloc(sizeof(struct my_node), GFP_KERNEL);
new_node->data = 123;

l

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务