UNIX系统中C语言使用之文件与目录详解
1. 目录基础
在UNIX系统里,目录是文件系统的重要组成部分。每个目录至少有两个特殊条目:
- “.” :指代当前目录。程序可通过打开 “.” 文件来读取当前目录,无需知晓其具体名称。
- “..” :表示当前目录的父目录。程序能通过不断将目录切换为 “..” 从当前目录移动到根目录。在根目录下,“..” 是指向根目录的循环链接。
目录名有一些特殊规则:
- “/” 代表根目录。
- 空文件名(如 /a/b/)指向其前面名称对应的目录。
- 两个连续的斜杠 “//” 会被解释为单个斜杠。
2. 特殊文件
特殊文件是UNIX文件系统独特的一部分。每个I/O设备(如磁盘驱动器、磁带驱动器、终端等)都关联至少一个特殊文件。对用户程序而言,特殊文件看起来和普通文件一样,但对其进行读写请求会激活关联的设备。例如,若程序想在磁带上写入数据,可打开 /dev/mt 文件,对该文件的读写请求会使磁带移动并以适当密度读写数据。按照UNIX惯例,特殊文件的条目存于 /dev 目录,但操作系统并不强制要求。
3. 可移动文件系统
整个文件系统层次结构无需都存储在同一设备上,不过文件系统的根始终位于同一位置,以便在系统启动时定位。mount系统调用(及相关用户命令)有两个参数:
- 一个特殊文件的名称,其关联的存储卷(如磁盘包)具有独立文件系统的结构,包含自身的目录层次结构。
- 一个现有(普通)文件或目录的名称。
该调用的作用是用特殊文件上存储的子树替换目录树的一个叶子节点。此后,对(之前的)普通文件或