欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

《精通UNIX下C语言编程及项目实践》学习笔记02 文件子系统

《精通UNIX下C语言编程及项目实践》学习笔记02 文件子系统

《精通UNIX下C语言编程及项目实践》学习笔记目录
http://bbs.pediy.com/showthread.php?t=86392
第二篇: 文件子系统
  普天之下,莫非王土;率土之滨,莫非王臣. UNIX之中,莫非文件.
  四、文件系统结构
  磁盘在使用前, 需要分区和格式化. 格式化操作将在磁盘分区中创建文件系统, 它们将确定文件的存储方式和索引方法, 确定磁盘空间分配和回收算法.
  UNIX文件系统的存储由<目录-i节点-数据块>三级构成,其中目录存储了文件的层次结构, 数据块存储了文件的具体信息, i节点是连接文件层次结构与其数据内容的桥梁.
  UNIX文件系统将磁盘空间划分为一系列大小相同的块, 划分为引导块、超级块、i节点区和数据区四个部分.
  文件系统通过i节点对文件进行控制和管理. 其中, 每个文件对应一个i节点, 每个i节点具有唯一的节点号, 记录了文件的属性和内容在磁盘上的存储位置. 但文件名并不记录在i节点里, 而是存储在目录文件中.
  磁盘文件如何存储?
  文件系统通过目录记载文件名及其对应的i节点编号, 通过i节点记录文件的信息和内容. 事实上, i节点直接记录的只是文件的属性, 文件的具体内容存储在数据区的数据块中, i节点中仅保留了一个<磁盘地址表>来记录文件内容存储的位置.
  <磁盘文件表>由13个块号组成, 每个块号占用4个字节, 代表了数据区中的一个数据块编号.UNIX文件系统采用三级索引结构存储文件,它把<磁盘地址表>分为直接索引地址, 一级索引地址, 二级索引地址和三级索引地址等四个部分. 其中前10项为直接索引地址, 直接指向文件数据所在磁盘快的块号. 第11/12/13项分别为一级/二级/三级索引地址. 一级间接索引的含义在于其存储的并非文件数据所在磁盘块的块号, 而是先指向一个<磁盘块号表>然后再指向具体磁盘块的块号. 同理, 二级/三级间接索引则是先间接指向了两次<磁盘块号表>才指向具体磁盘块的块号.
  如果文件系统的数据块大小为1kB, 每个<磁盘块号表>能够记录256个数据项. 那么, 直接索引能管辖10个数据块, 而一级索引能管辖1*256个数据块, 二级索引能管辖1*256*256(65536)个数据块, 三级索引能管辖1*256*256*256(16777216)个数据块.
  例题: 大小为56000K的文件,占用多少索引块空间?
  答: 因为(10+256) < 56000 < (10+256+65536), 故该文件具有二级间接索引. (56000-10-256)/256=217.7, 则文件需要二级间接索引块为218个,所以总索引块需要1(一级间接索引块)+1(二级间接索引块)+218=220.
  磁盘文件读取示例(仿ls命令)
  通过stat结构中st_mode判断文件类型

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功