当前位置:嗨网首页>书籍在线阅读

08-目录

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.2 目录

在UNIX中,目录是个简单的概念:它包含一个文件名列表,每个文件名对应一个inode编号。每个文件名称为目录项,每个名字到inode的映射称为链接。目录内容(就是用户执行ls命令所看的结果)就是该目录下所有文件名列表。当用户打开指定目录下的文件时,内核会在该目录列表中查找文件名所对应的inode编号,并将该inode编号传递给文件系统,文件系统使用它来寻找文件在设备上的物理位置。

目录还能包含其他目录。子目录是在另一个目录里的目录。基于这个定义,除了文件系统树真正的根目录 / 外,所有目录都是某个父目录的子目录。毫无疑问,目录/称为根目录(root directory,不要把根目录和root用户的home目录/root混淆)。

路径名是由文件名及一级或多级父目录组成。绝对路径名是以根目录起始的路径名,例如/usr/bin/sextant。相对路径名是不以根目录起始的路径名,例如bin/sextant。为了使路径名有效,操作系统必须知道目录的相对路径。使用当前工作目录(在下一节会讨论)作为起始点。

除了用于描述路径目录的“/”符号和终止路径名的null符号以外,文件和目录名可以包含其他一切字符。也就是说,标准上实际要求路径名中字符为在当前环境下有效的可打印字符,甚至可以是ASCII。但是,由于内核和C库都没有强加这样的限制,一般都是由应用程序强制只使用有效可打印字符。

较老的UNIX系统限制文件名至多有14个字符。今天,所有现代UNIX文件系统对每个文件名至少支持255个字节[3]。Linux下许多文件系统甚至支持更长的文件名[4]

当前工作目录

每个进程都有一个当前目录,一般是在创建时从父进程继承的。该目录就是大家熟知的进程的当前工作目录(current working directory,cwd)。内核解析相对路径名时,会把当前工作目录作为起始点。例如,如果进程的当前工作目录是/home/blackbeard,且该进程试图打开parrot.jpg,内核将试着打开/home/blackbeard/ parrot.jpg。相反地,如果进程试图打开/usr/bin/mast,内核将直接地打开/usr/bin/mast。当前工作路径对绝对路径名(就是以斜杆/起始的路径名)没有影响。

进程可以获取并更改其当前工作目录。