文件
是指由创建者所定义的、具有文件名的一组相关元素的集合,可分为有结构文件和无结构文件两种。在有结构的文件中,文件由若干个相关记录组成;而无结构文件则被看成是一个字符流。文件在文件系统中是一个最大的数据单位,它描述了一个对象集。例如,可以将一个班的学生记录作为一个文件。一个文件必须要有一个文件名,它通常是由一串 ASCII 码或(和)汉字构成的, 名字的长度因系统不同而异。如在有的系统中把名字规定为 8 个字符,而在有的系统中又规定可用 14 个字符。用户利用文件名来访问文件。此外,文件应具有自己的属性,属性可以包括:
(1) 文件类型。可以从不同的角度来规定文件的类型,如源文件、目标文件及可执行文件等。
(2) 文件长度。文件长度指文件的当前长度,长度的单位可以是字节、字或块,也可能是最大允许的长度。
(3) 文件的物理位置。 该项属性通常是用于指示文件在哪一个设备上及在该设备的哪个位置的指针。
(4) 文件的建立时间。这是指文件最后一次的修改时间等。
文件类型为了便于管理和控制文件而将文件分成若干种类型。由于不同系统对文件的管理方式不同,因而它们对文件的分类方法也有很大差异。为了方便系统和用户了解文件的类型,在许多 OS 中都把文件类型作为扩展名而缀在文件名的后面,在文件名和扩展名之间用“.”号隔开。下面是常用的几种文件分类方法。
按用途分类根据文件的性质和用途的不同,可将文件分为三类:
(1) 系统文件。这是指由系统软件构成的文件。大多数的系统文件只允许用户调用,但不允许用户去读,更不允许修改;有的系统文件不直接对用户开放。
(2) 用户文件。指由用户的源代码、目标文件、可执行文件或数据等所构成的文件。用户将这些文件委托给系统保管。
(3) 库文件。 这是由标准子例程及常用的例程等所构成的文件。 这类文件允许用户调用,但不允许修改。
按文件中数据的形式分类按这种方式分类,也可把文件分为三类:
(1) 源文件。这是指由源程序和数据构成的文件。通常由终端或输入设备输入的源程序和数据所形成的文件都属于源文件。它通常是由 ASCII 码或汉字所组成的。
(2) 目标文件。这是指把源程序经过相应语言的编译程序编译过,但尚未经过链接程序链接的目标代码所构成的文件。它属于二进制文件。通常,目标文件所使用的后缀名是“.obj” 。
(3) 可执行文件。这是指把编译后所产生的目标代码再经过链接程序链接后所形成的文件。
按存取控制属性分类根据系统管理员或用户所规定的存取控制属性,可将文件分为三类:
(1) 只执行文件。该类文件只允许被核准的用户调用执行,既不允许读,更不允许写。
(2) 只读文件。该类文件只允许文件主及被核准的用户去读,但不允许写。
(3) 读写文件。这是指允许文件主和被核准的用户去读或写的文件。1
按组织形式和处理方式分类根据文件的组织形式和系统对其的处理方式,可将文件分为三类:
(1) 普通文件:由 ASCII 码或二进制码组成的字符文件。一般用户建立的源程序文件、数据文件、目标代码文件及操作系统自身代码文件、库文件、实用程序文件等都是普通文件,它们通常存储在外存储设备上。
(2) 目录文件:由文件目录组成的,用来管理和实现文件系统功能的系统文件,通过目录文件可以对其它文件的信息进行检索。由于目录文件也是由字符序列构成,因此对其可进行与普通文件一样的种种文件操作。
(3) 特殊文件:特指系统中的各类 I/O 设备。为了便于统一管理,系统将所有的输入/输出设备都视为文件,按文件方式提供给用户使用,如目录的检索、权限的验证等都与普通文件相似,只是对这些文件的操作是和设备驱动程序紧密相连的,系统将这些操作转为对具体设备的操作。根据设备数据交换单位的不同,又可将特殊文件分为块设备文件和字符设备文件。前者用于磁盘、光盘或磁带等块设备的 I/O 操作,而后者用于终端、打印机等字符设备的 I/O 操作。
文件操作用户通过文件系统所提供的系统调用实施对文件的操作。 最基本的文件操作有: 创建文件、删除文件、读文件、写文件、截断文件和设置文件的读/写位置。但对于一个实际的 OS,为了方便用户使用文件而提供了更多的对文件的操作,如打开和关闭一个文件及改变文件名等操作。
(1) 创建文件。在创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系统的目录中,为之建立一个目录项。目录项中应记录新文件的文件名及其在外存的地址等属性。
(2) 删除文件。当已不再需要某文件时,可将它从文件系统中删除。在删除时,系统应先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。
(3) 读文件。在读一个文件时,须在相应系统调用中给出文件名和应读入的内存目标地址。此时,系统同样要查找目录,找到指定的目录项,从中得到被读文件在外存中的位置。在目录项中,还有一个指针用于对文件的读/写。
(4) 写文件。在写一个文件时,须在相应系统调用中给出该文件名及该文件在内存中的(源)地址。为此,也同样须先查找目录,找到指定文件的目录项,再利用目录中的写指针进行写操作。
(5) 截断文件。如果一个文件的内容已经陈旧而需要全部更新时,一种方法是将此文件删除,再重新创建一个新文件。但如果文件名及其属性均无改变时,则可采取另一种所谓的截断文件的方法,此即将原有文件的长度设置为 0,或者说是放弃原有的文件内容。
(6) 设置文件的读/写位置。前述的文件读/写操作都只提供了对文件顺序存取的手段,即每次都是从文件的始端读或写。设置文件读/写位置的操作,用于设置文件读/写指针的位置,以便每次读/写文件时,不是从其始端而是从所设置的位置开始操作。也正因如此,才能改顺序存取为随机存取。
文件结构文件的逻辑结构(File Logical Structure)。这是从用户观点出发所观察到的文件组织形式, 是用户可以直接处理的数据及其结构, 它独立于文件的物理特性, 又称为文件组织(FileOrganization)。
文件的物理结构,又称为文件的存储结构,是指文件在外存上的存储组织形式。这不仅与存储介质的存储性能有关,而且与所采用的外存分配方式有关。
无论是文件的逻辑结构,还是其物理结构,都会影响对文件的检索速度。文件的逻辑结构。对文件逻辑结构所提出的基本要求,首先是能提高检索速度,即在将大批记录组成文件时,应有利于提高检索记录的速度和效率;其次是便于修改,即便于在文件中增加、删除和修改一个或多个记录;第三是降低文件的存储费用,即减少文件占用的存储空间,不要求大片的连续存储空间。