Loading

35-文件的基础操作原理

文件的基本操作请添加图片描述

创建文件(create 系统调用)

进行Create系统调用时,需要提供几个主要参数

  1. 所需的外存空间大小(如:一个盘块,即1KB)
  2. 文件存放路径(‘D:/Demo’)
  3. 文件名
    操作系统在处理Create系统调用时,主要做了两件事
  4. 在外存中找到文件所需的空间(结合上小节的空闲链表法,位示图法,成长组链接法)
  5. 根据文件存放路径找到该目录对应的目录文件(此处就是D:/Demo目录),在目录中创建该文件对应的目录项。目录项中包含了文件名,文件在外存中的存放位置。

删除文件(delete系统调用)

进行Delete系统调用时,需要提供几个主要参数

  1. 文件存放路径(‘D:/Demo’)
  2. 文件名
    操作系统在处理Delete系统调用时,主要做了两件事
  3. 根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项
  4. 根据该目录项记录的文件在外存中的存放位置、文件大小等信息,回收文件占用的磁盘块
  5. 从目录表中删除对应的目录项

读文件(read系统调用)

进程在使用read系统调用完成写操作。需要指明是哪个文件(在支持"打开文件中"操作的系统中,只需要提供文件在打开文件表中的索引号即可),还需要指明要读入多少数据(如:读入1KB),指明读入的数据要放在内存中的什么位置。

写文件(write系统调用)

进程在使用write系统调用完成写操作的时候,需要指明是哪个文件,写出多少数据,写回外存的数据存放在内存中的什么位置。

打开文件(open系统调用)

进行Open系统调用时,需要提供几个主要参数

  1. 文件存放路径(‘D:/Demo’)
  2. 文件名(‘test.txt’)
  3. 要对文件的操作类型(如:r 只读; rw 读写等)
    操作系统在处理Open系统调用时,主要做了几件事
  4. 根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项,并检查该用户是否有指定的操作权限。
  5. 将目录项复制到内存中的"打开文件表"中,并将对应表目的编号返回给用户,之后用户使用打开文件表来指明要操作的文件
    两种打开文件表
  6. 系统的打开文件表(整个系统只有一张,有一个打开计数器)
  7. 每个进程都有一个打开文件表(有一个系统表索引号)
    在Windows系统中,打开的TXT文件无法删除的原因是:系统先检查了系统打开文件表,确认此时是否有进程正在使用该文件。请添加图片描述

关闭文件(close系统调用)

操作系统在处理Close系统调用时,主要做了几件事

  1. 将进程的打开文件表相应表项删除、
  2. 回收分配给该文件的内存空间等资源
  3. 系统打开文件表的打开计数器-1,若count=0,则删除对应表项。请添加图片描述
posted @ 2023-02-04 10:05  nliuc  阅读(62)  评论(0编辑  收藏  举报