22. 文件系统 API
目录树 文件的抽象 操作系统将物理存储设备(如磁盘)的复杂性隐藏起来,提供了一个简单、统一的抽象——文件 文件可以看作是一个虚拟的磁盘,即一个命名的、一维的字节序列,支持 read, write, lseek 等操作 这种抽象使得上层应用无需关心数据在物理磁盘上的具体位置和存储方式 目录的引入 当文件数量增多时,需要一种方式来组织和管理它们 操作系统引入了目录 (Directory) 的概念,它是一种特殊的文件,其内容是其他文件或目录的列表 通过将文件和目录组织成一个层次化的树状结构,即目录树,可以方便地对文件进行分类、查找和管理 多数类 Unix 系统遵循 FHS (Filesystem Hierarchy Standard) 的目录结构约定,为软件和用户预测文件位置提供了便利 目录操作 API 操作系统提供了一系列系统调用来操作目录树,核心操作围绕“增删改查” mkdir: 创建一个新的目录 rmdir: 删除一个空的目录 getdents: 读取目录中的条目 (directory entries) link / unlink: 创建或删除文件的链接 链接 链接是文件系统的一个重要特性,它允许一个文件拥有多个名字或存在于目录树的多个位置 链接主要分为两种类型:硬链接和软链接(符号链接) 硬链接 Hard Link 定义:硬链接是让多个目录条目(文件名)直接指向磁盘上同一个文件索引节点 (inode) 每个文件在文件系统中都有一个唯一的 inode,它包含了文件的元数据(如权限、大小、数据块位置等)和数据本身 创建一个硬链接,相当于为同一个 inode 增加了一个新的入口点(文件名) 特性: 所有指向同一个 inode 的硬链接地位平等,没有主次之分 inode 内部维护一个链接计数 (reference count), 只有当这个计数减到 0 时,文件系统才会真正删除该 inode 和对应的数据块,这也是 unlink 系统调用的由来 限制: 不能为目录创建硬链接,以防止在目录树中产生循环 不能跨越不同的文件系统(因为 inode 号只在当前文件系统内唯一) 软链接 Symbolic Link 定义:软链接,也称符号链接 (symlink),是一个特殊的文件,它的内容是另一个文件或目录的路径 ...