- 论坛徽章:
- 0
|
有关rb_entry
红黑树的每一个rb_node节点是嵌入在用红黑树进行组织的数据结构中,而不是用rb_node指针进行数据结构的组织。
rb_entry这个宏就是用来获取包含了rb_node的数据结构的指针的。
#define rb_entry(node,type,member) container_of(node,type,member)
#define container_of(ptr, type, member) ({\
const typeof( ((type *)0)->member ) *__mptr = (ptr);\
(type *)( (char *)__mptr - offsetof(type,member) );})
比如 struct vma_area_struct{
....
struct rb_node vm_rb;
.....
}
struct vm_area_struct *vma;
我们现在知道了 vma->vm_rb的地址(假设为addr, struct rb_node*类型的),就可以用rb_entry宏来获取vma的值了, 形式如下:
rb_entry(addr, struct vm_area_struct, vm_rb)。
自己看下相关内核代码就知道了。 |
|