一. 作用struct XXX_dev
{
cdev cdev;
}
struct XXX_dev *dev; /* device information */
*dev = container_of(inode->i_cdev, struct XXX_dev, cdev);
结构体对象 域指针 结构体 域
已知一个结构体 含有某个域 且知道该域的指针
可知该域指针所属的结构体对象
二.用法例子
filp->private_data = dev; /* for other methods */
struct test
{
char a;
char b;
char c;
}
struct test tttt;
*ptttt指针指向tttt,*pc指针指向tttt.c,*pa指针指向tttt.a,*pb指针指向tttt.b
这里pa pb pc 是已知的
struct test *ptttt= container_of(pa,struct test,a);
struct test *ptttt= container_of(pb,struct test,b);
struct test *ptttt= container_of(pc,struct test,c);
根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针
三.原理
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
获取结构体对象指针也即是获取结构体对象的第一个成员的指针
如下图:我们只需知道member0的指针即可,