@
abersheeran 文件存储在文件系统中,分为属性存储区(inode)和数据存储区(block),stat 只需要读属性存储区
不需要读过 linux 内核源码,遇到什么查什么而已,把它当做 helloworld 读就行,像我给的这个链接,你不需要搞清楚 flag 是什么意思,只需要知道它们会被填充到 stat 数据结构,并看看调用了哪些方法,根据方法并大概可以知道干了什么,不知道的跟进去看看就知道了
例如给你发的这个链接,vfs_statx(),根据名字你可以知道 linux 读取文件信息是通过 linux vfs 虚拟文件系统层拿的文件信息
它内部调用了 user_path_at(),可以知道它读取了文件路径,都不需要往里面看
然后调用了 vfs_getattr(),是通过 vfs 层读取了文件 attr
还调用了 real_mount(),那到了当前 mount 数据
...
然后你可能还想知道 user_path_at(),会发现最后调用了 filename_lookup(),然后你再分析它如何那文件信息的,最底层一般是汇编实现,可读性不高,不用太钻,你非要钻也行,无非就是花几天几周几个月而已,你掂量掂量看看值不值就行了
顺便提一下,c 语言不像现代高级语言,会返回一个对象,搞底层的 c 一般不会这么玩,一般会创建好数据结构,把指针传给个函数,让函数内部操作填充这个数据结构,最后返回 int 型状态信息,所以你会看到 vfs_statx()返回 int,而参数 stat 才是真正返回给调用层的数据结构
如果你非要知道 flag 的是,拿 flag 查 google 一定可以查出来,但是我给你了,你就往旁边一扔说未阅读过 Linux 内核代码,你对其他人给你带来的帮助给人感觉持有消极态度
看不懂就别看了,你目前的能力没法满足你的好奇心,过几年再看吧