container_of用来根据成员变量查找所在基结构体的地址,其宏定义如下:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
ptr : 成员变量的地址
type : 要查找基结构体的变量类型
member : 成员变量名字
现在来分析下这是个什么玩意:
1. 先定义一个结构体
struct Person
{
char* name;
unsigned int age;
unsigned int tall;
};
2. 用Person结构体定义一个变量:
struct Person Man;
下面我们通过成员变量tall来查找结构体Man的地址:
3. 用变量去替代宏container_of:
#define container_of(&Man.tall, struct Person, tall) ({ \
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
ptr : 成员变量的地址
type : 要查找基结构体的变量类型
member : 成员变量名字
现在来分析下这是个什么玩意:
1. 先定义一个结构体
struct Person
{
char* name;
unsigned int age;
unsigned int tall;
};
2. 用Person结构体定义一个变量:
struct Person Man;
下面我们通过成员变量tall来查找结构体Man的地址:
3. 用变量去替代宏container_of:
#define container_of(&Man.tall, struct Person, tall) ({ \