当list1被挂接到list2之后,作为原表头指针的list1的next、prev仍然指向原来的节点,为了避免引起混乱,Linux提供了一个list_splice_init()函数: static inline void list_splice_init(struct list_head *list, struct list_head *head); 该函数在将list合并到head链表的基础上,调用INIT_LIST_HEAD(list)将list设置...
static inline void list_splice(struct list_head *list, struct list_head *head) { if (!list_empty(list)) __list_splice(list, head); } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. __list_splice 上面的list_splice和list_splice_init都用到了此函数,其原型如下: static inline void __list_s...
staticinlinevoidlist_splice_init(structlist_head*list,structlist_head*head) { if(!list_empty(list)) { __list_splice(list,head,head->next); INIT_LIST_HEAD(list);<---跟list_splice唯一的不同 } } 1. 2. 3. 4. 5. 6. 7. 3.5.4 list_splice_tail_init staticinlinevoidlist_splice_tail...
将被挂接在list2链表上,位于list2和list2.next(原list2表的第一个节点)之间。 新list2链表将以原list1表的第一个节点为首节点,而尾节点不变。 当list1被挂接到list2之后,作为原表头指针的list1的next、prev仍然指向原来的节点,为了避免引起混乱,Linux提供了一个list_splice_init()函数: staticHPT_INLINEvoi...
static inline void list_splice_init(struct list_head *list, struct list_head *head); 该函数在将list合并到head链表的基础上,调用INIT_LIST_HEAD(list)将list设置为空链。 3. 遍历 遍历是链表最经常的操作之一,为了方便核心应用遍历链表,Linux链表将遍历操作抽象成几个宏。在介绍遍历宏之前,我们先看看如何...
__list_splice(list, head); INIT_LIST_HEAD(list); } } /** * list_entry - get the struct for this entry * @ptr: the &struct list_head pointer. * @type: the type of the struct this is embedded in. * @member: the name of the list_struct within the struct. ...
list_empty(list)) { __list_splice(list, head->prev, head); INIT_LIST_HEAD(list); } } 这四种形式无一例外,都是使用函数 __list_splice 进行实现,代码如下,写的极其简明直观。 static inline void __list_splice(const struct list_head *list, struct list_head *prev, struct list_head *next)...
__list_splice(list,head); INIT_LIST_HEAD(list); } } 9.一些有用的宏: 9.1得到 list_entry(ptr, type, member) 简单的讲,这个宏的作用是:通过结构(type)中的某个变量(member)的指针(ptr)获取结构本身的指针. 也就是说,type中包含一个成员变量member.且某个结构体实体中member的指针为ptr.则list_ent...
list_splice是 Linux 内核中用于将一个链表合并到另一个链表中的函数。它可以将整个链表 list 插入到 head 链表中,或者更具体地,将list链表插入到head链表首部。 inlinevoidlist_splice(conststructlist_head *list,structlist_head *head); 2.11
void sort( Comp compfunction );//采用指定函数compfunction来判定两个元素的大小。 25.splice()合并两个list 语法: void splice( iterator pos, list &lst );//把lst连接到pos的位置 void splice( iterator pos, list &lst, iterator del );//插入lst中del所指元素到现链表的pos上 ...