Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235672
  • 博文数量: 51
  • 博客积分: 1065
  • 博客等级: 少尉
  • 技术积分: 556
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-11 14:50
文章分类

全部博文(51)

文章存档

2012年(1)

2011年(6)

2010年(39)

2008年(1)

2007年(4)

分类:

2010-03-05 11:45:27

container_of(pointer,container_type,container_field);
container_of宏根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针。这个宏需要一个container_field字段的指针,该字段包含在container_type类型的结构中,然后返回包含该字段的结构指针。它的定义如下:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})

比如,有一个结构体变量,其定义如下:
struct demo_struct { 
    type1 member1; 
    type2 member2; 
    type3 member3; 
    type4 member4; 
 }; 
struct demo_struct demo;

同时,在另一个地方,获得了变量demo中的某一个域成员变量的指针,比如:
type3  *memp = get_member_pointer_from_somewhere();
此时,如果需要获取指向整个结构体变量的指针,而不仅仅只是其某一个域成员变量的指针,我们就可以这么做:
//memp:指向结构体中member3的一个指针;  demo_struct:结构体类型;  member3:结构体中该成员的名字;
struct demo_struct *demop = container_of(memp, struct demo_struct, member3);
这样,我们就通过一个结构体变量的一个域成员变量的指针获得了整个结构体变量的指针。
阅读(2955) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:open时获取次设备号

给主人留下些什么吧!~~