先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;
}