天天看点

container_of(ptr, type, member)

内核代码中

#define container_of(ptr, type, member)                       \

                       (type *)((char *)(ptr) - (char *) &((type *)0)->member)

用于在已知结构体里面成员member和该成员的指针ptr(就是地址)和结构体类型type, 返回该成员所在的结构体的首地址。

 1. (type *)((char *)(ptr):结构体里面已知成员的地址

 2. (char *) &((type *)0)->member:设该结构体struct的基地址为0,member的地址就是相对于struct首地址的偏移量.该成员在结构体内的偏移地址

 3.相减就是该结构体的首地址。

继续阅读