container_of()宏

转载 2011年01月16日 10:55:00

指针ptr指向结构体type中的成员member;通过指针ptr,返回结构体type的起始地址
          type
      |----------|
      |          |
      |          |
      |----------|
ptr-->| member --|
      |----------|
      |          |
      |          |
      |----------|
/**
* container_of - cast a member of a structure out to the containing structure
* @ptr:     the pointer to the member.
* @type:   the type of the container struct this is embedded in.
* @member:  the name of the member within the struct.
* */

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

container_of宏,它的功能是得到包含某个结构成员的结构的指针:
 
其实现如下:
 
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({                      /
        const typeof( ((type *)0)->member ) *__mptr = (ptr);    /
        (type *)( (char *)__mptr - offsetof(type,member) );})
 
    分析可知__mptr指向的是一个type结构里typeof(((type *)0)->member)类型member成员的指针,offsetof(type,member)是这个成员在结构中的偏移,单位是字节,所以为了计算type结构的起始地址,__mptr减去它自己的偏移。

 

 

 

 

Linux内核中的常用宏container_of其实很简单

http://blog.csdn.net/npy_lp/article/details/7010752 版权声明:本文为博主原创文章,未经博主允许不得转载。     开...

Linux字符设备驱动中container_of宏的作用

Linux字符设备驱动中container_of宏的作用 首先看看这个宏的原型: container_of(ptr,type,member)   功能:根据一个结构体变量中的一个成员变量的指针来获...

深入浅出实例解析linux内核container_of宏

做一件事情首先应该知道它的目的是什么。 container_of的目的:如何通过结构中的某个变量获取结构本身的指针。 总体思路:假想一下,你的结构体中有好几个成员,你如何通过里面的“任一成员”获取...

container_of()宏

在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码: /**  * container_of - c...

container_of宏分析

1. 背景概要 最近这几天在忙于研究spi驱动,在看spi核心代码(spi.c)时,发现一个container_of宏,不甚了解,于是深入研究之。这不看不知道,一看吓一跳啊,一跟进去又给你整个更复杂的...

C——container_of宏

container_of 宏: container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码: 439/** 440 * container_of - ca...

linux内核container_of宏解析

在看linux内核的源代码的时候,经常会看到一个宏,就是container_of,它的作用是由一个结构体的成员指针得到这个结构体的指针。看的多了,就想搞明白这是怎么个东西,打开source insig...

linux中container_of宏

linux中container_of(ptr, type, member)宏的作用是传入结构体类型type的域member地址ptr,返回该结构体变量的首地址,定义如下: #define conta...
  • luyysea
  • luyysea
  • 2012年10月01日 00:44
  • 770

linux container_of 宏

container_of()宏 在学习Linux驱动的过程中,遇到一个宏叫做container_of。 该宏定义在include/linux/kernel.h中,首先来贴出它的代码: /**...

Linux字符驱动中container_of宏的作用

首先看看这个宏的原型:     container_of(ptr,type,member)    功能:根据一个结构体变量中的一个成员变量的指针来获取指向整个结构体变量的指针。     参数:    ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:container_of()宏
举报原因:
原因补充:

(最多只允许输入30个字)