linux内核里面有个container_of 方法(准确的说是个宏),可以根据结构体的某个字段的指针求得整个结构体的指针,感觉蛮新颖的,摘录下来。
#include <stdio.h>
#define offsetof(type, member) (size_t)&(((type*)0)->member)
/**
* container_of - cast a member of a structure out to the containing structure
* @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.
*
*/
#define container_of(ptr, type, member) ({ \
void *__mptr = (void *)(ptr); \
(type *)(__mptr - offsetof(type,member) );})
typedef struct person_t {
char name[100];
int age;
int weight;
} person_t;
void get_person_by_weight(int *wptr) {
struct person_t *pptr = container_of(wptr, struct person_t, weight);
printf("person: name=%s, age=%d, weight=%d\n", pptr->name, pptr->age, pptr->weight);
}
int main() {
person_t p = {
.name = "wzq",
.age = 23,
.weight = 126
};
get_person_by_weight(&(p.weight));
}
Linux容器_of宏解析
本文深入探讨了Linux内核中的container_of宏,该宏能够通过结构体成员的指针找到整个结构体的指针,提供了代码示例并详细解释了其工作原理。
223

被折叠的 条评论
为什么被折叠?



