在Linux 内核中,container_of 函数使用非常广,例如 Linux内核链表 list_head、工作队列work_struct中
在Linux 内核中有一个大名鼎鼎的宏container_of...我们先来看看它在内核中是怎样定义的。
?
我们先来分析一下container_of(ptr,type,member),这里面有ptr,type,member分别代表指针、类型、成员。...因此,上述代码的作用是首先使用typeof获取结构体成员j的类型为int,然后顶一个int指针类型的临时变量__mptr,并将结构体变量中的成员的地址赋给临时变量__mptr。...(struct test *)((char *)__mptr - offsetof(struct test,j));
接着我们来看一下offsetof(struct test,j),他在内核中如下定义...在回首一下它:
(struct test *)((char *)__mptr - offsetof(struct test,j));
linux内核中随随便便一个宏就有如此精妙
请输入正文