09+文件操作.docx
《09+文件操作.docx》由会员分享,可在线阅读,更多相关《09+文件操作.docx(12页珍藏版)》请在冰点文库上搜索。
![09+文件操作.docx](https://file1.bingdoc.com/fileroot1/2023-5/20/c4e0a335-32f5-47aa-aab7-f04c416c9398/c4e0a335-32f5-47aa-aab7-f04c416c93981.gif)
09+文件操作
实习九文件操作
一、实习内容
文件操作及其实现
二、实习目的
文件系统是操作系统中管理和存取信息的机构,它具有“按名存取”的功能,不仅方便用户,而且能提高系统效率且安全可靠。
在用户程序中可使用文件系统的一整套文件操作(文件类系统调用),这类操作一般包括“打开文件”,“建立文件”、“关闭文件”、“读文件”、“写文件”和“撤消文件”等。
本实习模拟文件操作的实现,通过实习了解文件操作的作用。
三、实习题目
模拟实现采用二级目录结构的磁盘文件系统中的文件操作。
[提示]:
(1)文件系统使用文件目录来实现“按名存取”,在本实习中采用二级文件目录结构,第一级为主文件目录MFD,第二级为主用户文件目录UFD。
假定系统可用同时管理N个用户的文件,每个用户最多在磁盘上保存L个文件,在模拟实习中约定用户都是采用定长记录格式组织文件,那么,二级目录结构可用如下形式:
用户名
用户文件目录地址
主文件目录MFD
文件名
文件属性
记录长度
文件地址
用户文件目录UFD
系统中只有一张主文件目录表,表中的每一栏与一个用户对应,从中可找到用户文件目录表的存放首地址。
共有N张用户文件目录表,在用户文件目录表中,每一栏与一个文件对应。
其中“文件属性”规定了文件的使用权限:
只可读,可读可写;“记录长度”指组成该文件的逻辑记录长度;“文件地址”指文件存放在磁盘上的首块地址。
为简单起见,在模拟实习中约定按MS-DOS的链接结构组织文件。
(2)用户对文件进行存取之前,必须先提出“建立文件”或“打开文件”,系统为每个用户设置一张用户已打开文件表UOF,用以说明当前正在使用的文件的情况,如果用户最多同时打开或建立S个文件,那么,已打开文件表应该有S个登记栏。
结构如下:
文件名
文件属性
记录长度
状态(打开/建立)
读指针
写指针
用户打开或建立一个文件是,相应的文件操作把有关该文件的信息登记到已打开文件表中。
读指针和写指针用于指出对文件存取的当前位置。
(3)假定文件系统提供的文件操作有:
“建立文件”(create),“打开文件”(open),“关闭文件”(close),“读文件”(read),“写文件”(write),“撤消文件”(delete)。
用户要保存一个新文件时,必须顺序调用“建立文件”,“写文件”,“关闭文件”的操作,用户要读,修改,扩充一个已经保存好的文件时,必须顺序调用“打开文件”,“读/写文件”,“关闭文件”的操作,在模拟实习中可不断地从键盘输入文件操作命令来模拟各用户程序中所调用的各种文件操作,用一个结束命令(end)停止程序执行。
于是程序的结构可参考图9-1。
图9——1程序结构框图
(4)当用户想把一批信息作为一个文件存放到磁盘上以备以后使用时,首先向系统提出“建立文件”的要求,命令的一般格式如下:
Create(文件名,记录长度,文件属性)
模拟文件系统进行“建立文件”的算法如图9-2。
图9——2“建立文件”模拟流程
(5)用户在使用一个文件前,必须提出“打开文件”的要求,命令的一般格式为
Open(文件名,操作类型)
其中操作类型指出文件打开后,用户将对文件进行读操作还是写操作。
文件系统必须根据文件属性核对操作的合法性,当操作类型与文件属性不符合时就不允许打开。
为简单起见,在本实习中约定对处在“建立”状态的文件不允许打开。
如图9-3。
(6)文件系统在执行“写文件”操作时要区分两种情况。
第一种情况是在执行“建立文件”操作后,用户提出“写文件”;第二种情况是在执行“打开文件”操作后,用户提示“写文件”。
由于“建立文件”操作仅完成登记注册的工作,要把信息存入磁盘,必须执行“写文件”操作,用户提出“写文件”时可要求一次只写一个记录,这时,存放一个文件需要由多次“写文件”来完成,也可要求一次写一个文件,这是,需要给出文件长度。
约定在本模拟实习种只讨论每次顺序写一个记录的方式。
“打开文件”后,用户提出“写文件”时,文件系统认为用户要对一个已经建立好的文件进行修改,扩充或插入,约定在本模拟实习中只讨论对文件进行修改的情况,可以顺序修改文件中每个记录或只修改指定的某个记录,因此,在本实习中“写文件”命令的格式可以是:
write(文件名:
记录号)
其中记录号是指出需修改的记录编号,要求顺序写一个记录时,可省略记录号。
模拟“写文件”操作的种族哟流程如图9-4
是
是
是
图9——4“写文件”模拟算法
(7)文件打开后就可用“读文件”操作请求顺序读文件种的若干记录,或请求读文件种的制定记录。
约定本模拟实习中只讨论顺序读文件中若干记录的方式,于是命名的格式可为:
Read(文件名,读长度)
其中读长度表示本次要读的文件记录数。
模拟“读文件”操作的算法如图9-5
图9——5“读文件”模拟算法
(8)当对某个文件不再需要读或写时,用户应关闭文件,“关闭文件”的命令格式为:
Close(文件名)
系统进行“关闭文件”操作的工作时把文件从已打开文件表中除名,模拟算法如图9-6
(9)当用户不再需要一个由自己建立的文件时,可以向系统提出撤消文件的要求。
“撤消文件”的一般格式为:
Delete(文件名)
系统执行“撤消文件”操作时,要将所撤消的文件在用户目录表中除名,且收回该文件所占用的存储区域。
在实习中可采用图9-7的模拟算法。
四.思考题
(1)本实习中模拟的文件操作,要求用户按“建立”,‘写’,“关闭”和“打开”“读”“关闭”的步骤来存取文件的。
在有些系统中允许用户把“打开”“建立”“关闭”等要求隐含在“读”或“写”的要求即可。
这种方法称隐含方式。
在隐含方式下,当系统发现用户要求写一批信息到一个未建立的文件时,就自动地为用户建立工作,然后再写入信息。
同样地,当系统发现用户要读的文件为打开时,就自动地为用户做打开工作,然后再读。
对一个具有隐含方式处理能力的系统来说,文件操作的算法应作怎样的修改?
(2)当允许多个用户共享某些文件时,你怎样设置文件目录和已打开文件表?
对共享文件,多个用户可同时读,但当有用户在读时,其他用户不能对该文件执行写,也不允许多个用户同时对一个文件执行写。
那么各种文件操作算法应如何修改?
(3)本实习中设计到磁盘存储空间的分配和回收,对模拟MS—DOS的链接结构的文件进行读或写等,能把前面几个实习中的程序结合在本实习中吗?
五.实习报告
(1)实习题目。
(2)程序中所用的数据结构及说明。
(3)打印一份源程序并附上注释。
(4)打印初始的文件目录表,输入的操作命令和每条命令执行后的已打开文件表;在程序运行结束后打印所有用户的文件目录表。