首页 > 代码库 > linux 内核 中链表list
linux 内核 中链表list
这个结构从list.h 移到了types.h, 可见内核对循环链表的重视
include/linux/types.h中定义
struct list_head {
struct list_head *next, *prev;
};
include/linux/list.h 中的宏
初始化 一个叫name的链表节点
#define LIST_HEAD_INIT(name) { &(name), &(name) }
#define LIST_HEAD(name) \
struct list_head name = LIST_HEAD_INIT(name)
eg:
typdef struct list_tag {
struct list_head _list;
int element;
int other;
} xxx_list_t;
int main( void )
{
xxx_list_t l = {
._list = LIST_HEAD_INIT( l._list ),
.element = 1,
.other = 2,
};
}
而
#define INIT_LIST_HEAD(ptr) do { \
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
}
变成了
static inline void INIT_LIST_HEAD(struct list_head *list)
{
list->next = list;
list->prev = list;
}
不知还在哪里使用:
#define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name)
定义一个头, 没有其他数据部分
xxxx_head
next ------------------------>
prev ------------------------>
#define list_entry(ptr, type, member) \ container_of(ptr, type, member)
的作用是:
返回指针
---->struct {
ptr----> list
...
}
即根据ptr 是那个结构struct 中的 那个成员可以得出这个包含它的结构体指针
这其中使用到了 typeof (根据一个变量返回一个 ‘类型‘)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。