引言
内核中使用的数据结构有双向链表、hash链表和单向链表,另外,红黑树和基树(radix数)也是内核使用的数据结构。
container是Linux中很重要的一个概念,使用container能实现对象封装。代码如下:
|
|
通过这种方法巧妙地实现了通过结构的一个成员找到整个结构的地址。内核中大使用了这种方法。
1 双向链表
list 是双向链表的一个抽象,它的定义在/include/linux目录下。
定义
|
|
list_head这个结构看起来怪怪的,它竟没有数据域!所以看到这个结构的人第一反应就是我们怎么访问数据?
其实list_head不是拿来单独用的,它一般被嵌到其它结构中,如:
|
|
此时list_head就作为它的父结构中的一个成员了,当我们知道list_head的地址(指针)时,我们可以通过list.c提供的宏 list_entry 来获得它的父结构的地址。
list提供的list_entry使用了container,通过container可以从list找到整个数据对象,这样list就成为了一种通用的数据结构。
|
|
方法
|
|
举例
|
|
本文总阅读量 次
本文由 Yu Zhang 发表于 Yu Zhang's Blog ,采用署名-非商业性使用-禁止演绎 3.0进行许可。
非商业转载请注明作者及出处。商业转载请联系作者本人。