文件
文件(File)是被命名的相关信息的集合体。它通常存放在外存(如磁盘、磁带)上,可以作为一个独立单位存放和实施相应的操作(如打开、关闭、读、写等)。例如用户编写的一个源程序、经编译后生成的目标代码程序、初始数据和运行结果等,均可以文件形式保存。所以,文件表示的对象相当广泛。一般地,文件是由二进制代码、字节、行或记录组成的序列,它们由文件创建者或用户定义。
文件中的信息由创建者定义。很多不同类型的信息都可存放在文件中,如源程序、目标程序、可执行程序、数值数据、文本、工资单、图形图像、录音等。根据信息类型,文件具有一定的结构。如文本文件是一行一行(或页)的字符序列;源文件是子程序和函数序列,它们又有自己的构造,如数据说明和后面的执行语句;目标文件是组成模块的字节序列,系统链接程序知道这些模块的作用;而可执行文件是由一系列代码段组成的,装入程序可把它们装入内存,然后运行。
![c1160d90cbf5de8aa758534b1bbbfa2a.png](https://i-blog.csdnimg.cn/blog_migrate/27362eb38b11d5625afe9ffea3ad7ca0.jpeg)
文件类型
为便于管理和控制文件,常把文件分成若干类型。由于不同系统对文件的管理方式不同,因而对文件的分类方法也有很大差异。下面是常用的几种文件分类方法。
- 按用途分类
(1)系统文件—— 由操作系统及其他系统程序的信息所组成的文件。这类文件对用户不直接开放,只能通过操作系统提供的系统调用为用户服务。
(2)库文件—— 由标准子程序及常用的应用程序组成的文件。这类文件允许用户使用,但用户不能修改它们。
(3)用户文件—— 由用户创建、管理的文件,如源程序、目标程序、原始数据、计算结果等。这类文件可由创建者(即文件主)或被授权者进行适当的读、写或其他操作。
- 文件中的数据形式分类
(1)源文件—— 从终端或输入设备输入的源程序和数据所构成的文件,它通常由ASCII码或汉字组成。
(2)目标文件—— 源程序经过相应语言的编译程序进行编译后,尚未经过链接处理的目标代码所形成的文件。它属于二进制文件。
(3)可执行文件—— 经过编译、链接之后所形成的可执行目标文件。
- 按存取权限分类
(1)只读文件—— 仅允许对其进行读操作的文件,不允许写操作。
(2)读写文件—— 允许文件主和被授权用户对其进行读或写操作的文件。
(3)可执行文件—— 允许被授权用户执行它,但通常不允许读或写。
- 按保存时间分类
(1)临时文件—— 用户在一次解题过程中建立的“中间文件”,它只保存在磁盘上,当用户退出系统时,它也随之撤消。
(2)永久文件—— 长期保存的有价值的文件,以备用户经常使用。
- 在UNIX/Linux和MS-DOS系统中,按文件的内部构造和处理方式分类
在这些系统中文件类型主要有普通文件、目录文件和特殊文件。
(1)普通文件—— 由表示程序、数据或文本的字符串构成,内部没有固定的结构。这类文件包括一般用户建立的源程序文件、数据文件、目标代码文件,也包括各种系统文件(如操作系统本身的众多代码文件)和库文件(如标准I/O文件和数学函数文件)。
(2)目录文件—— 由下属文件的目录项构成的文件。它类似于人事管理方面的花名册—— 本身不记录个人的档案材料,仅仅列出姓名和档案分类编号。对目录文件可进行读、写等操作。
(3)特殊文件—— 特指各种外部设备。为了便于统一管理,系统把所有I/O设备都作为文件对待,按文件格式提供用户使用,如目录查找、存取权限验证等方面与普通文件相似,而在具体读、写操作上,要针对不同设备的特性进行相应处理。特殊文件分为字符特殊文件和块特殊文件。前者是有关输入/输出的设备,如终端、打印机和网络等;后者是存储信息的设备,如硬盘、软盘和磁带等。
普通文件通常分为ASCII文件和二进制文件。ASCII文件由只包含ASCII字符的正文行组成,每个正文行以回车符或换行符终止,各行的长度可以不同。ASCII文件又称文本文件,常用来存储资料、程序源代码和文本数据。文本文件的最大特点是可以直接显示和打印,可用普通文本编辑器进行编辑加工。
二进制文件所包含的每个字节可能有256种值。因此,对于表达信息来说,二进制文件是一种更为有效的方式,但它不能在终端上直接显示出来。大家最熟悉的二进制文件恐怕就是可执行文件。
可执行文件与一般文本文件不同,都有内部结构。在UNIX/Linux系统中它有5个区,依次是文件头、正文段、数据段、重定位区和符号表区。
文件头结构由幻数(标志可执行文件的特征),正文段长度,数据段长度,BSS段(Block Started by Symbol,存放未初始化的数据)长度,符号表长度,入口单元及各种标志组成。重定位时利用重定位区,而符号表用于调试程序;
存档文件是二进制文件的另一示例。在UNIX/Linux系统中,它由编译过、但未链接的库过程(模块)集合组成。每个存档文件的结构是在其目标模块之前有一个文件头,这个文件头由模块名、创建日期、文件拥有者、保护代码和文件长度等项组成。文件头全是二进制数码;
![de3b61386f66a71e8e6eefe0a963eb0d.png](https://i-blog.csdnimg.cn/blog_migrate/98bc5436ebcbbca7d0c8933ed04346e7.jpeg)
所有操作系统都必须至少识别一种文件类型—— 它自己的可执行文件。有些操作系统可以识别多种文件类型。一般情况下,对文件进行操作时必须注意其类型,特别是不同操作系统所识别的文件类型是不一致的。
文件的命名
文件是抽象机制,提供在磁盘上存放信息和以后从中读出的方法。用户不必了解信息如何存放、存放在何处、磁盘如何实际工作等细节。抽象机制最重要的特性就是“按名”管理对象。用户对文件也是“按名存取”的。
很多操作系统支持的文件名都由两部分构成:文件名和扩展名。二者间用圆点分开,如prog.c。扩展名也称为后缀,利用扩展名可以区分文件的属性。
![a7e147b731b11b4a786f5e5fe4eb1b0c.png](https://i-blog.csdnimg.cn/blog_migrate/45b749b60468aaa215dfd0ad37ecd03a.jpeg)