35-文件的基础操作原理
文件的基本操作
创建文件(create 系统调用)
进行Create系统调用时,需要提供几个主要参数
- 所需的外存空间大小(如:一个盘块,即1KB)
- 文件存放路径(‘D:/Demo’)
- 文件名
操作系统在处理Create系统调用时,主要做了两件事 - 在外存中找到文件所需的空间(结合上小节的空闲链表法,位示图法,成长组链接法)
- 根据文件存放路径找到该目录对应的目录文件(此处就是D:/Demo目录),在目录中创建该文件对应的目录项。目录项中包含了文件名,文件在外存中的存放位置。
删除文件(delete系统调用)
进行Delete系统调用时,需要提供几个主要参数
- 文件存放路径(‘D:/Demo’)
- 文件名
操作系统在处理Delete系统调用时,主要做了两件事 - 根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项
- 根据该目录项记录的文件在外存中的存放位置、文件大小等信息,回收文件占用的磁盘块
- 从目录表中删除对应的目录项
读文件(read系统调用)
进程在使用read系统调用完成写操作。需要指明是哪个文件(在支持"打开文件中"操作的系统中,只需要提供文件在打开文件表中的索引号即可),还需要指明要读入多少数据(如:读入1KB),指明读入的数据要放在内存中的什么位置。
写文件(write系统调用)
进程在使用write系统调用完成写操作的时候,需要指明是哪个文件,写出多少数据,写回外存的数据存放在内存中的什么位置。
打开文件(open系统调用)
进行Open系统调用时,需要提供几个主要参数
- 文件存放路径(‘D:/Demo’)
- 文件名(‘test.txt’)
- 要对文件的操作类型(如:r 只读; rw 读写等)
操作系统在处理Open系统调用时,主要做了几件事 - 根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项,并检查该用户是否有指定的操作权限。
- 将目录项复制到内存中的"打开文件表"中,并将对应表目的编号返回给用户,之后用户使用打开文件表来指明要操作的文件
两种打开文件表 - 系统的打开文件表(整个系统只有一张,有一个打开计数器)
- 每个进程都有一个打开文件表(有一个系统表索引号)
在Windows系统中,打开的TXT文件无法删除的原因是:系统先检查了系统打开文件表,确认此时是否有进程正在使用该文件。
关闭文件(close系统调用)
操作系统在处理Close系统调用时,主要做了几件事
- 将进程的打开文件表相应表项删除、
- 回收分配给该文件的内存空间等资源
- 系统打开文件表的打开计数器-1,若count=0,则删除对应表项。