container_of宏在Linux内核中如何应用

   2024-10-07 9040
核心提示:在Linux内核中,container_of宏通常用于从结构体中获取包含该结构体的另一个结构体的指针。这在内核中经常用于实现链表、树等数

在Linux内核中,container_of宏通常用于从结构体中获取包含该结构体的另一个结构体的指针。这在内核中经常用于实现链表、树等数据结构。

container_of宏的定义如下:

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

在使用container_of宏时,需要传入3个参数:指向成员变量的指针ptr、包含该成员变量的结构体类型type和成员变量在结构体中的名称member。

以下是一个示例代码,在这个示例中,我们定义了一个结构体struct data,其中包含一个成员变量value和一个成员变量list_entry,然后通过container_of宏从list_entry指针中获取包含该结构体的指针:

#include <stdio.h>#include <stddef.h>struct data {    int value;    struct list_head list_entry;};int main() {    struct data my_data;    struct list_head *list_ptr = &my_data.list_entry;        struct data *data_ptr = container_of(list_ptr, struct data, list_entry);        printf("Value: %d\n", data_ptr->value);        return 0;}

在这个示例中,我们通过container_of宏从list_entry指针中获取了包含该结构体的指针data_ptr,并打印出了value的值。

 
举报打赏
 
更多>同类维修大全
推荐图文
推荐维修大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号