内核链表---Linux TCP/IP协议源码分析

来源:互联网 发布:python的ddt怎么用 编辑:程序博客网 时间:2024/06/03 13:52

Linux内核链表可以说是linux的基础也是精髓。一般的数据结构的形式如:

struct link

{

  int data;

  struct link *next;

}

这种结构最大的弊端时,由于data变量类型的不同,不能通用。需要根据data类型,重新定义一个链表结构。

Linux内核链表为解决上面的问题,实现如下:

定义了一个链表结构:

struct list_head

{

    struct list_head *next;

    struct list_head *prev;

}

将list_head嵌入到新的结构体中,如内核中netfilter结构中定义的

struct nf_hook_ops

{

   int hooknum;

   hookfn *fn;

   struct list_head list;

   int fn;

   int priority;

}

通过嵌入的list_head双向链表,nf_hook_ops也可以形成一个双向的链表结构。

内核中实现了链表的初始化,插入,删除,遍历等函数。

初始化:

#define INST_HEAD_LIST(struct list_head  *list)   {list->next = list; list_prev = list;}

插入:

static inline void list_add(struct list *new,struct list *head);

static inline void list_add_tail(struct list *new,struct list *head);

删除:

static inline void list_del(struct list *new);

遍历:

list_for_each(struct list *pos,struct list *head);



原创粉丝点击