目录

对于每一个接触过计算机的人来说,目录(directory)一词并不陌生,很多地方将其翻译为文件夹,我个人认为这一个词很有误导倾向。在没有学习操作系统时候,我们通常对与文件夹的理解是这样的:文件夹就像一个袋子,它将里面的文件或者文件夹装起来,我们进入到文件夹里会看到很多文件,然后就可以进行一系列操作。这是因为操作系统高度的封装性,让我们产生这一错觉。实际上,我们进入文件夹看到的只是文件夹这张索引表的一些内容,当我们想查看该文件夹下的某一文件时,操作系统是通过这张表找到文件的物理位置,然后在开始读取数据。

接下来让我们来理解目录真正的含义

以下资料是摘录与:汤小丹 第四版的《计算机操作系统》

通常,在现代计算机系统中,都要存储大量的文件。为了对这些文件实施有效的管理,必须对他们加以妥善组织,这主要是通过文件目录实现的。文件目录也是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用。对目录管理的要求如下:

  • 实现按名存储。用户只需要向系统提供所需要访问文件的名字,便能快速准确地找到指定文件在外存上的存储位置。这是目录管理中最基本的功能。
  • 提高对目录的检索速度,通过合理地组织目录结构加快对目录地检索速度,从而提高对文件的存取速度。这是设计一个大、中型文件系统所追求的主要目标。
  • 文件共享。在多用户系统中,因该允许多个用户共享一个文件,以节省大量的存储空间,并方便用户和提高文件的利用率。
  • 允许文件重名。系统应允许不同用户对不同文件采用相同的名字,以便于用户按照自己的习惯给文件命名和使用文件。

为了对一个文件进行正确的存取,必须为文件设置用于描述和控制文件的数据结构,称之为“文件控制块”。文件管理程序可借助于文件控制块中的信息对文件加以各种操作。文件与文件控制块一一对应,而人们把文件控制块的有序集合称为文件目录,即一个文件控制块就是一个文件目录项通常一个文件目录也被看做是一个文件,称为目录文件

文件控制块(File Control Block),通常包含三类信息,即基本信息、存取控制及使用信息。

1.基本信息包括

  1. 文件名,指用于标识一个文件的符号名。
  2. 文件物理位置,指文件在外存上的存储位置。
  3. 文件逻辑结构,指示文件是流式文件还是记录式文件。
  4. 文件的物理结构,知识文件是顺序文件、还是链接式文件或索引文件。

2.存取控制信息类

存取控制信息类包括文件主的存储权限、标准用户的存取权限以及一般用户的存取权限。

3.使用信息类

使用信息类一般包括文件的建立日期、文件的修改日期等。

基本的文件操作:

创建文件:需要给新文件分配必要的外存空间,并且在文件目录中为其建立一个目录项,简单来说就是在说索引表上,添加一行信息。

删除文件:从目录中找到要删除的目录项,然后再回收该文件占用的空间。

读文件:通过用户名去目录中查找,从而得到被读文件在外存中的位置,再进行写操作。

写文件:同上,再进行写操作。

我个人在这里总结一下:

  • 文件的组织管理是通过文件目录实行的。
  • 文件目录与目录文件是同一个东西,我们也一般称为目录。
  • 文件控制块就是文件目录项。
  • 一个目录就是一张索引表,这张索引表的每一行对应一个文件目录,记载文件名到物理地址的映射以及一些其他信息。

 

有很多事物可以佐证上面的结论:

一、

我们在同一个磁盘分区移动目录时,只需要几秒钟,但是如果将一个目录移动到另外一个磁盘分区时就需要较长时间了。原因其实很简单:在一个磁盘分区移动目录时,只是在增删目录项,并未对真正进行文件的读写。而后者则不同,除了增删目录项之外,还需要将文件写到另外一个磁盘分区中。

二、

大家可以看下图:

从上图可以看出来,在linux中所有的目录都显示为4096Byte大小,这与我们想象的不一样,因为这些文件夹里包含着很多其他文件,不应该这么小啊,这也恰好说明了目录其实就是一张索引表,在Linux下规定目录的大小都为4096Byte。如果想要知道目录对应的文件总共大小是多少,需要进行一层一层的搜索。

 

多级目录

多级目录其实也很简单,就是整个文件系统会形成一个目录树,这里我就不多说了。但是很多人会将目录与目录项弄混。

以上为例:

对于aa.py来说,当前目录是哪个。可能会有很多人说是aa.py,但是aa.py只是cnk这个目录的一个目录项而已,当前目录是cnk。

aa.py来说,上一级目录是哪个,是windows这个目录,因为aa.py的当前目录cnk又作为windows的一个目录项。

文件的访问

文件的访问都是通过文件路径来实现的,文件路径由文件名和分隔符组成,文件路径有两种写法。

绝对路径:以盘符或者根目录为参照点。

相对路径:以当前目录为参照点。

补充

  1. 在Windows系统中绝对路径的参照点为盘符,在Linux中则是根目录/
  2. /在Linux中有两种含义,表示根目录或者分隔符
  3. Windows中的分隔符为
  4. .表示当前目录,..表示上一级目录
原文地址:https://www.cnblogs.com/mlgjb/p/7953834.html