简单来说,就是这个结构体有很多成员变量,其中有一个成员变量是链表指针结构。
示例如下:
typedef struct _aaa {int val
struct _aaa* next
} LISTNODE
typedef struct _kernel {
int a
char b[32]
LISTNODE p
} KERNEL_LIST
*** 作系统内核, 如同其他程序, 常常需要维护数据结构的列表. 有时, Linux 内核已经同时有几个列表实现. 为减少复制代码的数量, 内核开发者已经创建了一个标准环形的, 双链表鼓励需要 *** 作列表的人使用这个设施.当使用链表接口时, 你应当一直记住列表函数不做加锁. 如果你的驱动可能试图对同一个列表并发 *** 作, 你有责任实现一个加锁方案. 可选项( 破坏的列表结构, 数据丢失, 内核崩溃) 肯定是难以诊断的.
为使用列表机制, 你的驱动必须包含文件 <linux/list.h>. 这个文件定义了一个简单的类型 list_head 结构:
struct list_head { struct list_head *next, *prev}
真实代码中使用的链表几乎是不变地由几个结构类型组成, 每一个描述一个链表中的入口项. 为在你的代码中使用 Linux 列表, 你只需要嵌入一个 list_head 在构成这个链表的结构里面. 假设, 如果你的驱动维护一个列表, 它的声明可能看起来象这样:
单链表
双链表
循环链表
详细请看 深入分析 Linux 内核链表
http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)