/*===============================================================
* Copyright (C) 2015 All rights reserved.
*
* 文件名称:test_container_of.c
* 创 建 者:Gavin
* 创建日期:2015年04月01日
* 描 述:gavinlu1015@gmail.com
*
================================================================*/
#include <stdio.h>
typedef unsigned int size_tt;
#define offsetof(TYPE, MEMBER) ((size_tt) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
int main(int argc, const char *argv[])
{
struct class{
int jack;
int tom;
};
struct class c1;
struct class *c2;
printf("c1's address: %p\n", &c1);
/*
* 我们知道c1班的tom的座位号,知道c1班的类型,知道有tom这个人,
* 就能找到这个班级
*/
c2 = container_of(&c1.tom, struct class, tom);
printf("get c1's address: %p\n", c2);
return 0;
}
linux中container_of(ptr, type, member)的使用
最新推荐文章于 2022-10-10 22:36:02 发布