container_of() 原型:
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); })
offsetof 原型:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
(TYPE *)0 : 指向该结构体起始地址的指针
&((TYPE *)0)->MEMBER : MEMBER 到 起始指针的字节数:相对地址 或 偏移量
ptr 是 member的地址
typeof 是获取member的类型, 用__mptr 保存 ptr的值
结构体变量的首地址 = ptr - 偏移量
container_of() 作用是通过一个结构体变量中的某个成员的地址 获取这个结构体变量的首地址。