文件的操作
文件的基本操作
- 创建文件。创建文件有两个步骤:一是为新文件分配外存空间;二是在目录中为其创建一个目录项,记录文件名、文件在外存中的地址等信息
- 删除文件
- 读文件
- 写文件
修改文件时需要将磁盘中的一块读入内存后,修改后在写入磁盘,所以需要访存 2 次。
文件的打开与关闭
文件的打开
当用户首次对某文件发出操作请求时,需要先使用系统调用 open 将文件打开。系统维护一个包含所有打开文件信息的表,成为打开文件表。
“打开”:指系统检索到指定文件的目录项后,将该目录项从外存复制到内存中的打开文件表的一个表目中,并将该表目的索引号(也称文件描述符) 返回给用户。
打开文件前:使用文件名定位,所以文件名不必是打开文件表的一部分 打开文件后:使用文件描述符定位
在 open()系统调用完成之后,后面再使用 read()、write()、Lseek()、close() 等操作的系统调用,都是用文件描述符。
文件的关闭
在多个进程可以同时打开文件的操作系统中,通常采用两级表:整个系统打开文件表和每个进程打开文件表。系统打开文件表为每个文件关联一个打开计数器(Open Count) ,以记录多少进程打开了该文件。当文件不再使用时,使用系统调用 close 关闭文件,则进程的打开文件表中会删除这一表目,该文件的打开计数器也会递减。当打开计数器为 0 时,在系统表中删除相应条目。
整个系统的打开文件表:包含与进程无关的信息。如文件在磁盘上的位置、访问日期和文件大小
每个进程的打开文件表:进程对文件的使用信息。如文件的当前读写指针、文件访问权限和指向系统表适当条目的指针