Linux中container_of的用法是什么

1267
2023/11/10 22:32:47
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在Linux中,container_of是一个宏函数,用于计算给定成员变量的指针所在的结构体的指针。它的定义如下:

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

container_of宏函数接受三个参数:

  • ptr:指向成员变量的指针。
  • type:结构体类型。
  • member:成员变量的名称。

它的作用是返回给定成员变量的指针所在的结构体的指针。

举个例子,假设我们有以下的结构体定义:

struct person {
    char name[20];
    int age;
    struct list_head list;
};

其中list是一个链表节点,类型为struct list_head。如果我们有一个指向list的指针变量ptr,我们可以使用container_of来获取ptr所在的person结构体的指针,如下所示:

struct person *p = container_of(ptr, struct person, list);

通过这样的方式,我们可以在链表中通过节点指针获取整个结构体,并进行相应的操作。这在Linux内核中经常使用,特别是在处理链表和数据结构时。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: 如何用OpenSSL进行证书吊销列表管理