处理 JFS 目录
目录提供文件系统、链接文件和索引节点子目录名称的层次结构。 对嵌套目录的深度没有任何限制。 磁盘空间上为目录分配 4096 字节的块,但是操作系统分配 512 字节记录的目录空间。
进程可以按常规文件读取目录。 但是,内核可以写入目录。 因此,目录由一组它们特定的子例程创建和维护。
JFS 目录结构
目录包含目录条目序列。 每个目录条目包含三个固定长度的字段(与文件索引节点相关联的索引号、文件名的长度和条目的字节数),以及一个文件名变长字段。 文件名字段以 null 结束,并被填充为 4 字节。 文件名最长可以为 255 字节。
目录条目长度可变,以使得文件名具有最大的灵活性。 然而,任何时候都分配全部目录空间。
没有任何目录条目可以超过目录的 512 字节区域。 当目录需要多于 512 字节时,另一个 512 字节的记录被追加到原始记录。 如果所分配数据块中的所有 512 字节记录均被填充,将分配一个附加的数据块(4096 字节)。
文件被除去时,文件在目录结构中占有的空格被添加到前面的目录条目。 有关所除去目录的信息保留,直到新的条目填充空出的空间。
每个目录都包含条目 .(点) (点)和 .. 和 ..(点,点)。 这个 (点) 目录条目指向目录本身的索引节点。 那 ... (点,点) 目录条目指向父目录的索引节点。 mkfs 程序初始化文件系统,以便(点)和 .. 新根目录中的 (点,点) 条目指向文件系统的根索引节点。
目录具有下列访问方式:
使用 JFS 目录 (编程)
更改进程的当前目录
系统引导时,第一个进程将根文件系统的根目录用作其当前目录。 使用 fork 子例程创建的新进程继承父进程使用的当前目录。 chdir 子例程更改进程的当前目录。
chdir 子例程对路径名进行语法分析,以确保目标文件是一个目录并且进程所有者对目录具有许可权。 chdir 子例程运行之后,进程使用新的当前目录搜索所有不以 /(斜杠)开头的路径名。
更改进程的根目录
可以使用 chroot 子例程使进程 Path 参数指定的目录成为有效的根目录。 呼叫进程的子进程将由 chroot 子例程指示的目录视为文件系统的逻辑根目录。
进程为所有以 /(斜杠)开始的路径名使用全局文件系统根目录。 所有以 /(斜杠)开头的路径名搜索从此新的根目录开始。
控制 JFS 目录的子例程
由于目录文件的唯一本性,目录由一个特殊系列的子例程进行控制。 下列子例程设计用于控制目录: