美文网首页
container_of

container_of

作者: 苦瓜不苦_b616 | 来源:发表于2019-04-22 19:23 被阅读0次
                                               container_of函数的作用

(1)、作用:通过ptr(结构体某个成员的实际地址)计算的到相结构体的实际首地址(进而可以得到整个结构体)。

(2)函数原型:
#define container_of(ptr,type,member) ({
const typeof( ((type *)0)->member ) *__mptr = (ptr);
(type *)( (char *)__mptr - offsetof(type,member) );})
函数解析:
第二行的主要作用是用作校验ptr的类型就是type,如果ptr的类型不是type的话编译就会有警告。
第三行的主要思想是:用已知结构体成员的实际地址减去他相对于结构体首地址的偏移量。其中的难点在于计算偏移量,其中sffsetof就是用来计算偏移量的。
sffsetof的原型是 #define offsetof(TYPE, MEMBER) &((TYPE *)0)->MEMBER
解析:由于定义0指针结构体他的首地址是0所以可以很容易得到成员相对于0地址的偏移量。这个偏移量也就上面所说的偏移量了。

(3)、实例列举
struct test
{
int a;
int b;
}
struct test *temp;
int c=temp->b;

temp = container_of(&temp->b,struct test,b);

相关文章

  • linux 内核 container_of() 宏函数 原理详解

    container_of() 宏函数源码: /** * container_of - cast a member ...

  • container_of

    (1)、作用:通过ptr(结构体某个成员的实际地址)计算的到相结构体的实际首地址(进而可以得到整个结构体)。 (2...

  • container_of

    功能 通过结构体成员变量的地址获取其结构体变量(container)的地址。 第一个参数 ptr 是成员的地址 第...

  • Linux 内核容器

    本文介绍Linux 4.4内核容器container_of()。 文件:include/linux/kernel....

  • container_of函数用法

    例二: 它的作用显而易见,那就是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针。比如,有...

  • 最近遇到的两个编译问题

    最近遇到两个编译问题,着实费了一番功夫。 container_of 问题 我在一个地方,定义了container_...

  • offsetof和container_of学习

    c++的类这么久自然说明上面的代码没啥意义,不过熟悉下整个流程还是好的

  • C语言链表常用宏——offsetof和container_of

    链表是内核最经典的数据结构之一,说到链表就不得不提及内核最经典(没有之一)的宏container_of。 先看看代...

  • 由Linux内核链表宏container_of引发

    在探究Linux内核链表的过程中引发了一些疑问: Linux内核用到很多链表结构,其中有很多精妙的宏定义,着实让人...

网友评论

      本文标题:container_of

      本文链接:https://www.haomeiwen.com/subject/pxpugqtx.html