Ch 4 文件和目录

获取文件信息的函数:stat, fstat, fstatat, lstat ls 命令调用最多的是 stat

文件类型:

  • 普通文件(文本和二进制)
  • 目录文件
  • 块特殊文件
  • 字符特殊文件
  • 命名管道 FIFO
  • 套接字
  • 符号链接

文件系统: 分区 | 分区 | 分区 | 自举块,超级块 | 柱面组 … | 3 超级块副本,配置信息,i节点图,块位图 | i节点… | 数据块

链接计数为 0 的时候才能删除文件的数据块,这也是删除一个目录项的函数是 unlink 的原因

stat 的大多数信息都是从 i节点 拿的,3中的 i节点数组指向后面的数据块,目录块根数据块放在一起,由 指向的 i节点编号 + 文件名 组成。这个 i 节点编号指向的是同一文件系统的 i 节点

mv 重命名如果在同一文件系统下,那么只会创建新的目录项,文件的实际内容并未移动

目录的 i节点数组,指向的都是目录块。里面至少有 文件名为 . 和 .. 的目录块

unlink 可确保即使程序崩溃,它所创建的临时文件也不会被保存下来 unlink 和 remove 都能解除对一个文件或目录的链接。对于文件 remove 与 unlink 相同。对于目录,remove 功能与 rmdir 相同

硬链接:直接指向 i 节点 限制:

  • 硬链接要求链接和文件位于同一文件系统
  • 只有超级用户才能创建指向目录的硬链接

符号链接(软链接):解决了上述的限制,一般用于将一个文件或整个目录结构移到系统的另一个位置

使用符号链接可能会在文件系统中引入循环,导致大多数的查找路径名的函数出错返回