您的位置:首页 > 运维架构 > Linux

linux内核container_of宏获取结构体地址

2016-05-29 22:59 513 查看
先mark一下 linux内核container_of宏

/*
* =====================================================================================
*
*       Filename:  contion_of.cpp
*
*    Description:
*
*        Version:  1.0
*        Created:  2016年05月29日 17时00分20秒
*       Revision:  none
*       Compiler:  gcc
*
*         Author:
*   Organization:
*
* =====================================================================================
*/
#include <stdio.h>
#include <stdlib.h>

/**
* 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 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) );})

struct A{
unsigned int c;
char a;
char b;
};

int main(int argc, char** argv){

struct A tmp;
tmp.c = 100;
tmp.b = 'c';
char *a = &tmp.b;
struct A *p = container_of(a,struct A,b);
printf("tmp.c = %u ,A.c = %u\n",tmp.c,p->c);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: