如何使用宏container_of获取指针元素的容器结构?

时间:2015-03-04 06:44:34

标签: c linux kernel

HeJ小鼠, 我想知道,可以使用linux内核中的macro container_of获取指针的容器吗?可以使用simmilar宏吗? F.ex

struct container {
int a;
struct *b;
};

有* b如何获得*容器? 谢谢

1 个答案:

答案 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;
}