UNIX 系统文件操作与杂项函数详解
1. 文件系统数据读取
在文件系统操作中,程序与之前示例有一些差异,主要体现在部分地址使用的单位以及单位转换方法上。
- 超级块读取 :在 getsblock 例程中,使用 bread 函数读取超级块,而不是直接读取。这是因为超级块的位置定义为磁盘块号,而非字节地址。
- inode 块号转换 : getinodes 例程里, itod 宏返回的是文件系统块号,而非磁盘块号,之后通过 fsbtodb 宏将其转换为磁盘块号。文件系统块大小可以是 4096 字节的任意倍数,而磁盘块通常为 512 字节。
- 块大小使用 :调用 bread 时,使用超级块结构的 fs_bsize 元素,而非定义的常量块大小,因为同一机器上不同文件系统的块大小可能不同。
- 块号转换 :在 bread 中,使用 dtob 宏将磁盘块号转换为字节偏移量,而非直接使用移位操作。
从文件系统读取数据块时,多数情况下,磁盘上 i-node 结构存储的信息足以完成任务,但有时也需要读取文件的数据块。文件关联的数据块地址存储在 dinode 结构中,读取过程如下:
-
超级会员免费看
订阅专栏 解锁全文
8042

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



