Skip to content

文件的操作

考情分析

文件操作属于文件管理基础,在 408 真题中以选择题为主,考查打开文件表的层次结构、文件描述符的含义等。属于 🔥🔥 中高频考点。

用户每天都在"打开文件、读写、关闭",但这几步背后涉及目录搜索、权限检查、打开文件表的管理——搞清楚这条链路,很多选择题就不会踩坑。

文件操作概述

操作系统通过一组系统调用为用户提供文件操作接口:

创建与删除

创建文件 create(filename, mode)

  1. 在目录中检查文件名是否已存在
  2. 为新文件分配一个 FCB(或 inode)
  3. 在目录中添加新的目录项 (filename, inode号)
  4. 分配必要的外存空间(也可能延迟到首次写入时)

删除文件 delete(filename)

  1. 在目录中查找文件名对应的目录项
  2. 回收该文件占用的外存空间
  3. 删除该目录项
  4. 如果使用 inode,则引用计数减 1,计数为 0 时回收 inode

打开与关闭

打开文件 fd = open(filename, mode)

打开文件是建立进程与文件之间联系的过程,是后续读写操作的前提。

执行步骤:

  1. 在目录中搜索文件名,找到对应的 FCB/inode
  2. 检查访问权限(mode 是否合法)
  3. 系统打开文件表中查找该文件是否已被打开
    • 若已打开:打开计数 +1
    • 若未打开:将 FCB/inode 信息复制到系统打开文件表
  4. 进程打开文件表中分配一个空闲表项,指向系统打开文件表中对应条目
  5. 返回进程打开文件表的索引,即文件描述符 fd

这就像去图书馆借书——第一次去前台登记(open)拿到借书卡号(fd),之后凭卡号直接借还,不用每次都报书名让管理员翻目录。

两级打开文件表

进程 A 的打开文件表          系统打开文件表
┌────┬──────────┐       ┌────┬──────────┬───────┐
│ fd │ 系统表索引│       │ 索引│ FCB 信息  │打开计数│
├────┼──────────┤       ├────┼──────────┼───────┤
│  0 │    →     │──────►│  3 │ file.txt │   2   │
│  1 │    →     │──┐    │  5 │ data.bin │   1   │
└────┴──────────┘  │    └────┴──────────┴───────┘
                   │         ▲
进程 B 的打开文件表  │         │
┌────┬──────────┐  │         │
│  0 │    →     │──┘         │
│  1 │    →     │────────────┘
└────┴──────────┘
作用包含字段
进程打开文件表每个进程私有fd、系统表索引、读写指针、访问模式
系统打开文件表全系统共享FCB/inode 信息、打开计数、文件锁

两级表的关系类似于"个人通讯录"和"公司员工花名册"——每个人的通讯录里记着自己常联系的同事编号,但详细信息统一查花名册。

关闭文件 close(fd)

  1. 将进程打开文件表中 fd 对应的表项清除
  2. 系统打开文件表中对应项的打开计数 -1
  3. 若打开计数减为 0,回收该系统表项,必要时将修改过的 FCB 写回磁盘

读与写

读文件 read(fd, buffer, size)

  1. 根据 fd 找到进程打开文件表中的表项
  2. 根据当前读指针位置和文件的物理结构,定位到磁盘块
  3. 将数据从磁盘块读入内存 buffer
  4. 更新读指针位置

写文件 write(fd, buffer, size)

  1. 根据 fd 定位文件
  2. 根据当前写指针位置,将 buffer 中的数据写入磁盘块
  3. 如果需要,分配新的磁盘块
  4. 更新写指针位置和文件大小

文件指针(读写位置)

文件指针记录了文件当前的读写位置。

  • 存放在进程打开文件表中(不在系统打开文件表中)
  • 每个进程独立维护自己的读写位置
  • seek(fd, offset, whence) 可以修改文件指针位置

文件指针的存储位置

「文件读写指针存放在哪里?」是选择题常见陷阱。答案是进程打开文件表中,而不是 FCB/inode 中,也不是系统打开文件表中。因为不同进程打开同一个文件时,各自的读写位置是独立的。

考研高频考点

  • 🔥🔥🔥 两级打开文件表的结构与区别
  • 🔥🔥🔥 文件读写指针存放在进程打开文件表中(选择题陷阱)
  • 🔥🔥 open 操作的执行过程
  • 🔥🔥 文件描述符 fd 的含义(进程打开文件表的索引)
  • 🔥 打开计数的作用(最后一个关闭时才回写和释放)

文件能被操作,也就能被滥用——下一篇来看操作系统如何保护文件不被越权访问。

真题练习

相关真题(27题)

2026Q46综合题8分

### (1)三小问拆解

文件基本概念
2025Q28选择题2分

最少页框数:由指令寻址方式决定,需保证一条指令执行不缺页

文件基本概念虚拟文件系统与挂载
2025Q29选择题2分

VFS:提供统一接口访问不同文件系统,不是加速工具

文件基本概念
2025Q31选择题2分

内存映射文件:映射到虚拟地址空间,可用于进程间通信

文件基本概念文件系统全局结构
2025Q32选择题2分

文件系统功能:确定盘块大小是文件系统的功能

文件基本概念
2024Q26选择题2分

银行家算法:判断安全序列个数

文件基本概念外存空闲空间管理
2024Q29选择题2分

缺页处理:如果有空闲页框则不需要淘汰页面

文件基本概念
2023Q31选择题2分

关闭文件:释放内存中的索引节点副本,不删除外存inode

文件基本概念
2022Q45综合题7分

综合题:索引节点的文件系统中目录、inode和多级索引的综合计算

文件基本概念
2021Q30选择题2分

父子进程:各有独立的虚拟地址空间(fork后写时复制)

文件基本概念
2020Q23选择题2分

系统调用是OS提供给应用程序的接口

文件基本概念
2020Q31选择题2分

当前工作目录:使用相对路径加快文件检索速度

文件基本概念
2018Q31选择题2分

文件访问优化:提前读、连续簇、延迟写、磁盘缓存都可加速

文件基本概念
2018Q46综合题8分

### 准备:每个间接块能管多少个簇?

文件基本概念
2017Q26选择题2分

磁盘分配:以簇为单位分配,1026B需要2个簇=2048B

文件基本概念
2017Q30选择题2分

文件权限位:4类用户×5种权限=20位

文件基本概念
2017Q31选择题2分

硬链接:共享inode,不同进程打开有各自的读写指针

文件基本概念
2016Q47综合题9分

综合题:FAT文件系统的目录结构、FAT表和文件访问路径

文件基本概念文件物理结构文件系统全局结构
2015Q29选择题2分

多级索引访问:直接索引访问1块,二级索引访问3块(2级索引+数据)

文件基本概念文件物理结构
2014Q29选择题2分

打开文件:将FCB/inode读入内存,不读文件内容

文件基本概念
2014Q46综合题7分

综合题:连续分配与链接分配方式下文件记录插入操作的对比

文件基本概念文件物理结构
2013Q24选择题2分

文件分配:CD-ROM只读且需随机访问,连续结构性能最好

文件基本概念文件物理结构
2013Q26选择题2分

文件长度决定因素:inode总数与单个文件长度无关

文件基本概念
2012Q46综合题8分

### (1)纯直接索引:算块号位宽 + 最大文件长度

2010Q30选择题2分

SCAN电梯调度:先向增加方向扫描到尽头再折返

文件基本概念文件物理结构
2009Q28选择题2分

最佳适应算法:按分配释放顺序模拟,计算最大空闲分区

文件基本概念文件物理结构
2009Q30选择题2分

多级索引:4×256B+2×64×256B+1×64×64×256B=1057KB

文件基本概念目录管理