Linux 2.6内核链表数据结构学习3

8 遍历遍历是链表最经常的操作之一,为了方便核心应用遍历链表,Linux链表将遍历操作抽象成几个宏。在介绍遍历宏之前,我们先看看如何从链表中访问到我们真正需要的数据项。struct list_head *i;list_for_each(i, &(nf_sockopts.list)){ struct nf_sockopts *ops = list_entry(i, struct nf_sockopts, list);} 函数首先定义一个(struct list_head *)指针变量i,然后调用list_for_each(i,&(sockopt.list))进行遍...
2011-04-28 10:13 | 阅读 766 次 | 评论 0 条

Linux 2.6内核链表数据结构学习2

4 插入对链表的插入操作有两种:在表头插入和在表尾插入。Linux为此提供了两个接口:static inline void list_add(struct list_head *new, struct list_head *head);static inline void list_add_tail(struct list_head *new, struct list_head *head);因为Linux链表是循环表,且表头的next、prev分别指向链表中的第一个和最末一个节点,所以,list_add和list_add_tail的区别并不大,实际上,Linux分别用__list_ad...
2011-04-27 12:00 | 阅读 833 次 | 评论 0 条

Linux 2.6内核链表数据结构学习1

Linux 2.6内核链表数据结构1 链表设计原理这里使用2.6内核,但实际上2.4内核中的链表结构和2.6并没有什么区别。不同之处在于2.6扩充了两种链表数据结构:链表的读拷贝更新(rcu)和HASH链表(hlist)。这两种扩展都是基于最基本的list结构,因此,本文主要介绍基本链表结构,然后再简要介绍一下rcu和hlist。链表数据结构的定义很简单(节选自[include/linux/list.h],以下所有代码,除非加以说明,其余均取自该文件):struct list_head { struct list_head *next, *prev;}; list_head结构包含...
2011-04-26 14:44 | 阅读 771 次 | 评论 0 条
文章分类
文章归档
最新评论