Linux 内核链表

目录

  • 一、简介
  • 二、使用方式

一、简介

在Linux内核中使用了大量的链表结构来组织数据,包括设备列表以及各种功能模块中的数据组织。这些链表大多采用在[include/linux/list.h]实现的一个相当精彩的链表数据结构。事实上,内核链表就是采用双循环链表机制。

内核链表有别于传统链表就在节点本身不包含数据域,只包含指针域。故而可以很灵活的拓展数据结构。而这种方式组成的链表又被称为是侵入式链表,具体可以参考这篇文章,这里就不作过多赘述了。

侵入式链表,内核链表

二、使用方式

struct task_struct task;
INIT_LIST_HEAD(&task.tasks); // 初始化链表

list_add(struct list_head *new, struct list_head *head) // 在结点head之后插入新节点
list_add_tail(struct list_head *new, struct list_head *head) // 在结点head之前插入新节点

list_for_each(pos, head) // 向前遍历
list_for_each_prev(pos, head) // 向后遍历

list_entry(ptr, type, member) // 获取成员
    
list_for_each_entry(pos, head, member)  // 向前遍历
list_for_each_entry_reverse(pos, head, member) // 向后遍历

你可能感兴趣的:(linux,链表,运维)