HeJ小鼠, 我想知道,可以使用linux内核中的macro container_of获取指针的容器吗?可以使用simmilar宏吗? F.ex
struct container {
int a;
struct *b;
};
有* b如何获得*容器? 谢谢
答案 0 :(得分:1)
b
是指向独立于容器的某个随机地址的指针,您需要将指针传递给指针然后使用offsetof:
#include <stdio.h>
#include <stddef.h>
struct item {
int c;
};
struct container {
int a;
struct item *b;
};
#define item_offset offsetof(struct container, b)
void fn(struct item **b)
{
struct container *x = (struct container *)((char *)b - item_offset);
printf("b->container->a = %d, b->c = %d\n", x->a, x->b->c);
}
int main(void)
{
struct container x;
struct item b = {20};
x.a = 10;
x.b = &b;
fn(&x.b);
return 0;
}