Appearance
文件的基本概念
考情分析
文件管理在 408 真题中累计考查约 85 分(2009-2026),其中「文件」小节约 45 分,属于 🔥🔥🔥 高频考点。选择题常考文件属性与分类,大题则结合物理结构与目录展开。
磁盘上全是 0 和 1 的比特流,文件系统要回答的核心问题是:怎么从这堆比特中找到"你的论文.doc",并把它完整地读出来?
什么是文件
文件(File)是操作系统中信息存储的基本单位,是一组有意义的信息的集合。从用户视角看,文件是逻辑外存的最小分配单元——用户通过文件名来访问数据,而无需关心数据在磁盘上的物理位置。
操作系统通过文件系统(File System)来管理文件,提供创建、删除、读写等操作接口,并负责将逻辑文件映射到物理存储位置。
文件的属性
每个文件都有一组**元数据(metadata)**来描述它的基本信息——就像一本书的版权页,记录了作者、出版日期、页数等信息,但不包含正文内容:
| 属性 | 说明 |
|---|---|
| 文件名 | 同一目录下唯一,是用户访问文件的标识 |
| 标识符 | 文件系统内部的唯一标识(如 inode 号) |
| 类型 | 文件的种类(如 .txt、.exe) |
| 位置 | 文件在外存上的存储位置指针 |
| 大小 | 文件当前长度(字节/块数) |
| 保护信息 | 访问控制信息(读/写/执行权限) |
| 时间戳 | 创建时间、最后修改时间、最后访问时间 |
| 所有者 | 文件的拥有者信息 |
文件名 vs 标识符
文件名是面向用户的,同一目录下不能重名;标识符是面向系统的,在整个文件系统内唯一。用户用文件名操作,系统内部用标识符(如 inode 号)索引。
文件的分类
文件可以从多个维度进行分类:
按用途分类
| 类型 | 说明 | 示例 |
|---|---|---|
| 系统文件 | 操作系统使用的文件 | 内核文件、驱动程序 |
| 用户文件 | 用户创建的文件 | 文档、代码 |
| 库文件 | 标准库和子程序 | libc.so、.dll 文件 |
按逻辑结构分类
| 类型 | 说明 |
|---|---|
| 无结构文件(流式文件) | 由字节流组成,无内部结构(如 .txt) |
| 有结构文件(记录式文件) | 由一组记录组成,每条记录有固定格式 |
按存取方式分类
| 类型 | 说明 |
|---|---|
| 顺序存取文件 | 按顺序逐个访问记录(磁带典型) |
| 随机存取文件(直接存取) | 可按任意顺序访问记录(磁盘典型) |
| 索引存取文件 | 通过索引表定位记录 |
按信息交换单位分类
| 类型 | 说明 |
|---|---|
| 字符设备关联文件 | 以字符为单位交换信息 |
| 块设备关联文件 | 以块为单位交换信息 |
文件的基本操作
操作系统提供一组系统调用来操作文件:
| 操作 | 说明 |
|---|---|
create | 创建文件:分配外存空间,在目录中创建目录项 |
delete | 删除文件:回收外存空间,删除目录项 |
open | 打开文件:将文件的目录项信息加载到内存的打开文件表 |
close | 关闭文件:将修改后的目录项写回磁盘,释放打开文件表表项 |
read | 读文件:根据读指针从文件读取数据到内存缓冲区 |
write | 写文件:将内存缓冲区的数据写入文件的写指针位置 |
seek | 重定位:修改文件的当前读写位置指针 |
这些基本操作可以组合实现更复杂的操作,例如「复制文件」= 创建新文件 + 读源文件 + 写新文件。文件操作就像图书馆的借还流程——先在前台登记(open),拿到借书卡号(fd),凭卡号借阅(read/write),最后归还注销(close)。
文件的打开与关闭
open 操作是文件系统中非常关键的操作,它建立了用户进程与文件之间的连接:
- 根据文件名搜索目录,找到对应的目录项(FCB)
- 将该文件的目录项复制到内存中的系统打开文件表
- 在进程打开文件表中新增一个表项,指向系统打开文件表中的对应项
- 返回一个文件描述符 fd(进程打开文件表的索引)
后续的 read、write 等操作都通过 fd 进行,避免每次都要搜索目录。
两级打开文件表
- 系统打开文件表:整个系统共享,记录文件的 FCB 信息、打开计数等
- 进程打开文件表:每个进程独有,记录 fd 到系统表项的映射、当前读写位置等
考研高频考点
- 🔥🔥🔥 文件的逻辑结构分类(无结构/有结构)及其特点
- 🔥🔥 文件的基本操作及其含义(尤其 open 的过程)
- 🔥🔥 文件属性有哪些(选择题常考)
- 🔥 两级打开文件表的结构与作用
- 🔥 文件的存取方式(顺序/随机/索引)
文件的属性信息最终要落地存储,下一篇来看操作系统用什么数据结构来管理这些元数据——索引节点 inode。