#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)这次再看就顺眼了吧(底层为什么是这样我还是不懂 。。。只知道这样确实可以) , 所以offsetof()的作用就是求我们梦寐以求的size, 并以size_t形式返回(size_t: 无符号整型) 。
(二) 内核编程的严谨性 #define container_of(ptr, type, member) ({\const typeof( ((type *)0)->member ) *__mptr = (ptr);\(type *)( (char *)__mptr - offsetof(type,member) );}) 这里我们只看第二行:
const typeof( ((type *)0)->member ) *__mptr = (ptr); 它的作用是什么呢? 其实没什么作用(勿喷勿喷,让我把话说完),但就形式而言 _mptr = ptr, 那为什么要要定义一个一样的变量呢??? 其实这正是内核人员的牛逼之处:如果开发者使用时输入的参数有问题:ptr与member类型不匹配,编译时便会有warnning, 但是如果去掉改行,那个就没有了,而这个警告恰恰是必须的(防止出错有不知道错误在哪里) 。。。这严谨性可以吧
typeof( ((type *)0)->member ) 它的作用是获取member的类型仅此而已 。至此基本结束
(三) 总结 container_of(ptr, type,member)函数的实现包括两部分:
1. 判断ptr 与 member 是否为同意类型
2. 计算size大小,结构体的起始地址 = (type *)((char *)ptr - size) (注:强转为该结构体指针)
现在我们知道container_of()的作用就是通过一个结构变量中一个成员的地址找到这个结构体变量的首地址 。
container_of(ptr,type,member),这里面有ptr,type,member分别代表指针、类型、成员 。
到此这篇关于linux内核编程container of()函数的文章就介绍到这了,更多相关linux container of()函数 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
Linux系统container of()函数内核编程的详细说明,linux内核编程container of()函数介绍相关文章的简单说明介绍 。
推荐阅读
- Linux系统下DHCP获取IP服务的安装教程,超详细讲解Linux DHCP服务
- Linux操作系统内CPU占用率居高不下的解决办法,linux下cpu飙高原因排查过程详解
- Linux系统下LVM阵列增加硬盘扩容的操作教程方法,Linux里LVM磁盘扩容详细步骤
- 华为c8813刷什么系统最好??
- 夏普sh8118u为什么叫做点心操作系统?有什么特点?
- 我的系统程序自动消失了这是怎么回
- 小米2a哪个系统版本占内存最低,占多少
- 苹果手机如何在本机上更新系统
- 奥迪q3车身稳定系统怎么开启 奥迪q3汽车稳定系统怎么用
- miui10系统官网下载专区,miui10下载官网手机版
