文件位置:include/linux/list.h
数据结构:
struct list_head {
struct list_head *next, *prev;
};
操作:
LIST_HEAD(name);
将name定义成上面的数据结构,同时next,prev都指向起始位置。
list_entry(ptr, type, member);
返回list_head的父结构体地址。其中ptr 是所求父结构体中list_head成员指针,type是所求父结构体类型,member是list_head成员名。
list_first_entry(ptr, type, member);
获取指定list_head结构体成员地址指向的next的父结构体地址。其中ptr 是所求结构体中list_head成员指针,type是所求结构体类型,member是结构体list_head成员名。
list_for_each(pos, head)
向下遍历;是一个for(;;)结构体,没有结束的。使用方法
list_for_each(pos, head)
{
…
}
Pos是一个list_head变量,相当于int i;for(i=0;i<4;i++) 中的i;
Head是一个要遍历的list_head头。
__list_for_each(pos, head)
同上,区别:没prefetch操作,快。
list_for_each_prev(pos, head)
向下遍历;Pos是一个list_head变量,相当于int i;for(i=0;i<4;i++) 中的i;
Head是一个要遍历的list_head头。
list_for_each_safe(pos, n, head)
向下遍历,同list_for_each,区别:pos可以初修改。n也是一个list_head变量
list_for_each_prev_safe(pos, n, head)
向上遍历,同list_for_each_prev,区别:pos可以初修改。n也是一个list_head变量
list_for_each_entry(pos, head, member)
向下遍历list_head的父结构。Pos是一个list_head变量,member 是名称
list_for_each_entry_reverse(pos, head, member)
向上遍历list_head的父结构。
list_prepare_entry(pos, head, member)
判断pos是有已指定,若已指定则无操作,否则将head的父结构地址返回。
list_for_each_entry_continue(pos, head, member)
list_for_each_entry_continue_reverse (pos, head, member)
list_for_each_entry_from(pos, head, member)
list_for_each_entry_safe(pos, n, head, member)
list_for_each_entry_safe_continue(pos, n, head, member)
list_for_each_entry_safe_from(pos, n, head, member)
list_for_each_entry_safe_reverse(pos, n, head, member)
list_add(struct list_head *new, struct list_head *head)
将new 插在前面
list_add_tail (struct list_head *new, struct list_head *head)
将new 插在后面
list_del(struct list_head *entry)
删除entry结点
list_replace(struct list_head *old,struct list_head *new)
替换
list_replace_init (struct list_head *old, struct list_head *new)
替换初始结点
list_del_init(struct list_head *entry)
删除并重新初始
list_move(struct list_head *list, struct list_head *head)
将list从原列中删除并添加到head头去
list_move_tail(struct list_head *list, struct list_head *head)
将list从原列中删除并添加到head尾去
list_is_last(const struct list_head *list, const struct list_head *head)
判断是否头
int list_empty(const struct list_head *head)
判断是否空