- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SHANGHAI UNIVERSITY
操作系统实验报告
学 院
计算机工程与科学学院
学号姓名
王杰
指导老师
张建
日期
2014.03.07
实验四 文件操作与管理
一、实验环境
Visual C++
二、实验目的
随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个极为重要的组成部分。学生应独立地用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。
三、实验要求
(1)实际一个n个用户的文件系统,每个用户最多可保存 m个文件。
(2)限制用户在一次运行中只能打开 l个文件。
(3)系统应能检查打入命令的正确性,出错要能显示出错原因。
(4)对文件必须设置保护措施,如只能执行,允许读、允许写等。在每次打开文件时,根据本次打开的要求,再次设置保护级别,即可有二级保护。
(5)对文件的操作至少应有下述几条命令:
creat 建立文件。
delete 删除文件。
open 打开文件。
close 关闭文件。
read 读文件。
write 写文件。
四、实验内容
(1)本实习设计一个 10 个用户的文件系统,每个用户最多可保存 10 个文件,一次运行中用户可打开 5 个文件。
(2)程序采用二级文件目录,即设置了主文件目录(MFD)和用户文件目录(UFD)。前者应包含文件主(即用户)及他们的目录区指针;后者应给出每个文件主占有的文件目录,即文件名,保护码,文件长度以及他们存放的位置等。另外为打开文件设置了运行文件目录(AFD),在文件打开时应填入打开文件
号,本次打开保护码和读写指针等。
(3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只修改读写指针,并不进行实际文件的读写操作。
五、设计思路
因系统小,文件目录的检索使用了简单的线性搜索,而没有采用Hash等有效算法。
文件保护简单实用了三位保护码,对应于允许读、允许写和运行执行,如下所示:
1 1 1
允许写 允许读 允许执行
如对应位为 0,则不允许。
程序中使用的主要数据结构如下:
①主文件目录和用户文件目录
打开文件目录:
程序框图:
六、实验过程
整个程序运行过程如下:
输入用户名—在MFD中查找—显示UFD文件链表—初始化AFD运行文件表
—输入操作命令—执行操作命令—保存文件目录—打印文件目录—结束
MFD、UFD和AFD的结构定义如下:
struct UFD
{
string filename;
int pro[3];
int codel;
UFD *next;
};
struct MFD
{
string username;
UFD *file;
MFD *next;
};
struct AFD
{
int filenum;
char filepro[3];
UFD *point;
AFD *next;
};
void init( ) 初始化函数
将文件链表变成循环链表,方便执行插入和删除操作。
int checkUser( ) 检查用户
检查输入的用户名是否在用户文件目录中。
void Create ( ) 创建一个文件
选择CREATE命令后,查看该用户的UFD链表内是否还有空闲结点:
若有则设置该结点的内容,然后打开、修改AFD;
若无则报错并退出。
void Open( ) 打开一个文件
选择OPEN命令后,输入要打开的文件名,在UFD查找是否有该文件名:
若有则打开并修改AFD;
若无则报错并退出。
void Close( ) 关闭一个文件
选择CLOSE命令后,输入需要关闭的文件名,在UFD中搜索是否有该文件名。
若无则报错;
若有,还要分两种情况:
通过检查,该文件并未被打开,则报错
存在该文件,且被打开,则正常调用void Close1(AFD *f),关闭文件。
void Delete( ) 删除一个文件
选择DELETE命令后,输入需要删除的文件名,在UFD中搜索是否有该文件名:
若无则报错;
若有,还要分两种情况:
通过检查,该文件已被打开,则需要先关闭该文件,确定需要关闭该文件后,通过调用void Close1(AFD *f),关闭文件,然后删除该文件。
存在该文
原创力文档


文档评论(0)