Linux字符驱动中container_of宏的作用
首先看看这个宏的原型:
/**
* 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 container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
功能:根据一个结构体变量中的一个成员变量的指针来获取指向整个结构体变量的指针。
<

container_of宏用于根据结构体成员指针获取整个结构体的指针。在Linux字符驱动中,常用于设备驱动的封装,如将设备的cdev结构与私有数据一起封装在结构体中。当insmod驱动并创建设备节点后,inode的i_cdev字段指向cdev,通过container_of可以找到对应的hello_device结构体,从而获取设备号并在open、read、write、ioctl等操作中传递设备信息。
最低0.47元/天 解锁文章

120

被折叠的 条评论
为什么被折叠?



