简介
container_of宏是内核的常用宏, 通常用于通过结构体成员指针来获取结构体指针. 该宏依赖的一个基本原则是结构体在虚拟内存中是连续存储的. 还有铭记就是它是一个编译期就已经计算好的宏.
为什么要有container_of
根据内核考古学, container_of首次出现在Linux 2.5.28版本, 是由Neil Brown提交, 根据提交记录看container_of宏是为了替换list_entry宏, 其中加入了一些类型安全检查.
使用
1.实践中container_of扮演起了联系不同结构体的角色, 如下图所示 ib_qp_init_attr类型变量引用了bnxt_re_cq类型变量中的一个成员ib_cq, 通过container_of我们可以间接的通过指针send_cq去找到包含了它的结构体变量指针.
2.当做获取成员所在结构体变量的工具