内核链表


能不能一种链表中链接不同的类型呢,相应这种号召,内核链表诞生了。

内核链表之所以能够链接不同的类型的数据,是因为它和普通链表不一样,它链接的不是数据结构的起始地址,而是链接的该数据结构中的的list_head属性。

内核链表_第1张图片

 

下面是比较重要的函数:

内核链表_第2张图片

 

 

其他的都很简单,专门介绍一下list_entry函数:

842584-20151124233434202-1525294286.jpg

 

842584-20151124233436093-522054639.jpg

 

函数最后返回的是这个结构体节点起始地址。Ptr是这个节点中list_head属性的地址,type是这个结构体节点的真实类型,member是这个结点中list_head属性的名字。

其中typeof关键字调用 0->member而没有出错,个人认为这是因为typeof并不对表达式求值,只是利用了其类型,所以不会出错。

 

可以使用如下方式调用:

Struct list_head * pos;

Struct student *tmp;

Tmp = list_entry(pos,struct list_head,pointer);

 

下面是一段标准使用代码:

内核链表_第3张图片

 

 

 



来自为知笔记(Wiz)


你可能感兴趣的:(内核链表)