首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

Linux内核链表(2)

2012-07-26 
Linux内核链表(二)4)遍历遍历是链表最经常的操作之一,为了方便核心应用遍历链表,Linux链表将遍历操作抽象

Linux内核链表(二)

4)遍历

遍历是链表最经常的操作之一,为了方便核心应用遍历链表,Linux链表将遍历操作抽象成几个宏。

在介绍遍历宏之前,我们先看看如何从链表中访问到我们真正需要的数据项:

a)由链表结点到数据项变量

由上面的分析可知,内核链表中仅保存了数据项结构中list_head成员变量的地址,那么我们如何通过这个list_head成员访问到作为它的所有者的节点数据呢?在list.h文件中有一个list_entry(ptr,type,member)宏,其中ptr是指向该数据中list_head成员的指针,也就是存储在链表中的地址值,type是数据项的类型,member则是数据项类型定义中list_head成员的变量名。

#define list_for_each_safe(pos, n, head) \for (pos = (head)->next, n = pos->next; pos != (head); \pos = n, n = pos->next)

?


基本上list.h文件大部分内容就是这些,其他的关于hlist等内容暂不分析。

当然内核链表并不仅限于在内核使用,可以通过改写list.h文件使之可以应用在普通用户程序中。

?

参考资料:

IBM developerWorks:http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html? 深入分析linux内核链表

?

?

?

热点排行