在驱动过程中,一直有一个做法,就是通过,我知道的一个结构体的一个成员,那么我就可以拿到整个结构体的数据
我们也称为以小博大。
就比如字符设备驱动过程中的input_dev input_handler 和evdev_handl 这三个结构体就天天在那博来博去的。
乍一想:就是通过,我知道的一个结构体的一个成员,那么我就可以拿到整个结构体的数据。
这肯定没问题啊,我都知道一个成员了,那拿到整个结构体的数据这不是易如反掌吗?
但是真的让你去操作你会怎么操作
?
?
?
内核是定义一个宏去完成以小博大
container_of:
#define container_of(ptr, type, member) ({
const typeof(

博客探讨了Linux内核中如何通过结构体的一个成员来获取整个结构体的地址。讲解了container_of宏的工作原理,它利用offsetof宏计算成员在结构体内的偏移量,从而实现‘以小博大’的效果。offsetof宏通过将0转换为指定类型的指针,然后获取成员的地址并计算偏移量。这些内核编程技巧对于理解底层系统编程至关重要。
最低0.47元/天 解锁文章
630

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



