《Linux操作系统原理分析之文件管理(2)》(23)
- 7 文件管理
- 7.3 文件的目录结构
- 7.3.1 文件说明、目录文件
- 7.3.2 文件目录结构
- 7.4 文件存取与操作
7 文件管理
7.3 文件的目录结构
7.3.1 文件说明、目录文件
- 文件说明 FCB:记录文件的管理、描述信息。与文件一一对应。
基本信息|详细
|–|:–|
文件名|字符串,通常在不同系统中允许不同的最大长度。可以修改。有些系统允许同一个文件有多个别名(alias);
别名的数目|文件的物理地址:包括哪个设备或文件卷 volume,以及各个存储块位置;
|文件逻辑结构|
文件物理结构|
文件类型|可有多种不同的划分方法,如:
有无结构(记录文件,流式文件)
内容(二进制,文本)
用途(源代码,目标代码,可执行文件,数据)
属性 attribute(如系统,隐含等)
文件组织(如顺序,索引等)
文件长度(当前和上限)|以字节、字或存储块为单位。可以通过写入或创建、打开、关闭等操作而变化。
访问控制信息 | 详细 |
---|---|
文件所有者(属主) | 通常是创建文件的用户,或者改变已有文件的属主; |
访问权限(控制各用户可使用的访问方式) | 如读、写、执行、删除等; |
使用信息 | 详细 |
---|---|
创建时间 | |
最晚一次读访问的时间和用户 | |
最晚一次写访问的时间和用户 |
- 索引节点 i_node
在 UNIX、Linux 操作系统中,把文件说明(文件描述符)信息分成两个部分:
a) 符号文件目录:由文件名和文件内部标识组成的树状结构,按文件名排序;
b) 基本文件目录(索引节点 i_node 目录):由其余文件说明信息组成的线性结构,按文件内部标识排序; - 目录文件:有所有文件目录组成的一个专门的独立的文件。目录文件是操作系统管理文件的重要依据。
7.3.2 文件目录结构
- 一级目录:整个目录组织是一个线性结构,系统中的所有文件都建立在一张目录表中。所有文件都登记在同一个文件目录中。它主要用于单用户操作系统。它具有如下的特点:
结构简单;
文件多时,目录检索时间长;
有命名冲突:如多个文件有相同的文件名(不同用户的相同作用的文件)或一个文件有多个不同的文件名(不同用户对同一文件的命名);
- 二级目录:在根目录(第一级目录)下,每个用户对应一个目录(第二级目录),在用户目录下是该用户的文件,而不再有下级目录。适用于多用户系统,各用户可有自己的专用目录。
第一级为主文件目录,主文件目录以用户名为索引,对每个用户都设置一个指向用户文件目录的指针。第二级为用户文件目录,用户文件目录为本用户的每一个文件设置一个目录项。
- 多级目录:或称为树状目录(tree-like)。允许用户在自己的文件目录中根据不同类型的文件再建立子目录。在文件数目较多时,便于系统和用户将文件分散管理。适用于较大的文件系统管理。下面是几个与目录相关的概念:
序号 | 概念 | 详细 |
---|---|---|
a) | 目录树 | 中间结点是目录,叶子结点是目录或文件。 |
b) | 目录的上下级关系 | 当前目录(current directory, working directory)、父目录(parent directory)、子目录(subdirectory)、根目录(root directory)等; |
c) | 路径(path) | 每个目录或文件,可以由根目录开始依次经由的各级目录名,加上最终的目录名或文件名来表示; |
d) | 相对路径 | 从某一目录开始,依次列出到达某文件的目录文件名,加上文件名。 |
e) | 当前目录 | 最近访问过的或正在使用的目录。当前目录的内容被复制在内存缓冲区内。可以提高查找文件说明信息的速度。 |
7.4 文件存取与操作
- 文件的存取方法
顺序存取:按照文件的逻辑地址依次顺序存取文件中的信息 ;
随即存取:可以从任意指定的位置开始读取文件 ;(编号或地址)
直接存取:又称按键存取(数据库中,按照关键字查询)
- 文件存储设备
顺序存取设备:磁带磁带。用于保存文档。
直接存取设备:
- 活动文件
活动文件:用户正在使用的文件。文件被执行“打开”操作时内存中建立该文件的控制块,它就从静止状态变为活动状态。
系统打开文件表:记录系统中所有打开文件的控制。
进程活动文件表:记录本进程中打开的所有文件。(指保存每个文件在系统活动表中的位置) - 文件操作
文件的功能是存储信息以备读取,不同的操作系统提供了不同的操作以对文件进行存取,以下是一些最常用的与文件有关的系统调用:
系统调用的步骤;
a. 准备参数
b. 调用系统调用
c. 判返回值(﹡出错,给出错误号等;﹡正常返回)
序号 | 字符 | 说明 |
---|---|---|
1) | CREATE | 创建一个空的文件并设置它的一些属性 |
2) | DELETE | 当用户或系统不再需要一个文件时,就可以将其删除以释放存储空间。这个系统调用就是完成这一功能。另外,一些操作系统会自动将 n 天没有被存取的文件删除。 |
3) | OPEN | 一个进程在存取文件之前,必须先将其打开。系统调用 OPEN 的功能是将文件的属性及其在磁盘上的地址列表取出存入主存中以备后序的调用使用。 |
4) | CLOSE | 当对一个文件的所有存取操作结束,在主存中的文件属性列表和地址列表就不再需要了,因此文件就应该被关闭以释放主存空间。 |
5) | READ | 这个系统调用被用于从文件中读取数据,一般是读取当前位置的字节。调用者必须指定需要读取的字节数以及相应的缓冲区。 |
6) | WRITE | 将数据写到文件的当前位置,如果当前位置是文件尾,文件就被增长。 |
7) | APPEND | 将数据添加至文件尾。 |
8) | SEEK | 在随机存取文件中,该系统调用被用于确定存取文件的当前位置。 |
9) | SET ATTRIBUTES | 文件的一些属性是由用户自己设定,并且可以在创建之后进行修改。 |
10) | RENAME | 对文件进行改名操作。 |