c++怎么让一个文件读取另一个文件的内容_深入浅出文件系统原理之文件读取(基于linux0.11)...

这篇文章讲的是文件系统树,我们知道,文件系统的数据是存在硬盘里的,这里来看一下,这些数据是怎么组织成一棵树,又是怎么进行遍历的。下面就是这棵树。

d3de8884623cfe66df23ff0b4f720234.png

下面我们以读取文件为线索,看一下过程是怎么样的。

1 我们要先根据文件路径找到文件对应的inode节点。假设是个绝对路径。文件路径是/a/b/c.txt。系统初始化的时候我们已经拿到了根目录对应的inode。从inode的结构体结构中,我们知道inode有一个字段保存了文件的内容。所以这时候就把根目录文件的文件内容读进来,是一系列的dir_entry结构体。然后逐个遍历,比较文件名是不是等于a,最后得到一个目录a对应的dir_entry。

2 根据dir_entry结构体我们知道,里面不仅保存了文件名,还保存了对应的inode号。我们根据inode号把a目录文件的内容也读取进来。以此类推。最后得到c对应的dir_entry。

3 再根据c对应的dir_entry的inode号,从硬盘把inode的内容读进来。发现他是一个普通文件。至此,我们找到了这个文件对应的inode节点。完成fd->file结构体->inode结构体的赋值。

4 然后我们开始读取文件的内容。根据fd我们找到对应的inode节点。根据file结构体的pos字段,我们知道需要读取的数据在文件中的偏移。根据这个偏移,可以算出应该取i_zone[9]字段的哪个索引,文件的前7块对应索引0-6,前7到7+512对应索引7等。得到索引后,读取i_zone数组在该索引的值,即我们要读取的数据在硬盘的数据块。然后把这个数据块从硬盘读取进来。返回给用户。

5 至此,完成了文件的查找和读取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值