container_of

linux的container_of函数怎么使用

小亿
100
2023-07-07 17:42:44
栏目: 编程语言

container_of函数是一个宏定义,用于从一个结构体的成员指针获取到该结构体的指针。它的定义如下:

#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); })

使用container_of函数的步骤如下:

  1. 首先,你需要有一个结构体类型,该结构体有一个成员指针。

  2. 然后,你需要有一个指向该成员的指针。

  3. 最后,使用container_of宏将成员指针转换为结构体指针。

下面是一个示例代码:

#include <stdio.h>
#include <stddef.h>
struct my_struct {
int data;
char name[20];
};
int main() {
struct my_struct obj;
int *data_ptr = &obj.data;
struct my_struct *ptr = container_of(data_ptr, struct my_struct, data);
ptr->data = 42;
printf("Data: %d\n", obj.data);
return 0;
}

在上面的示例中,我们定义了一个名为my_struct的结构体,其中包含一个整型成员data。然后我们创建了一个指向data成员的指针data_ptr。接下来,我们使用container_of宏将data_ptr转换为my_struct结构体的指针ptr,并将data成员设置为42。最后,我们打印出obj.data的值,应该输出42。

注意:container_of宏使用了typeof和offsetof两个C语言的扩展,所以需要确保你的编译器支持这些扩展。

0
看了该问题的人还看了