Linux 内核宏 container_of
程序员文章站
2024-01-23 16:10:34
...
1.定义
container_of(ptr, type, member);
ARGUMENTS
ptr
the pointer to the member.//代表指针
type
the type of the container struct this is embedded in.//类型
member //成员变量
the name of the member within the struct.
作用:通过一个结构体变量中的成员地址找到这个结构体变量的首地址
2.例子
#include <stdio.h>
#undef offsetof
#ifdef __compiler_offsetof
#define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
#else
#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER)
#endif
#define container_of(ptr, type, member) ({ \
const typeof( ((type*)0)->member ) *__mptr = (ptr); \
(type*)( (char*)__mptr - offsetof(type,member) ); })
typedef struct {
int age;
int num;
} student;
int main(){
student s;
printf("ss:%p\n", &s);
student *temp = container_of(&s.num, student, num);
printf("temp:%p\n", temp);
return 0;
}
结果:
ss:0x7fff156fe320
temp:0x7fff156fe320
通过s.num的地址找到了结构体变量的地址
上一篇: linux 内核container_of
下一篇: linux内核之container_of