操作系统课程设计一个简单的文件系统的详细设计.docx
《操作系统课程设计一个简单的文件系统的详细设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计一个简单的文件系统的详细设计.docx(54页珍藏版)》请在冰豆网上搜索。
操作系统课程设计一个简单的文件系统的详细设计
计算机系课程设计
实验报告
课程名称操作系统课程设计
实验学期2012至2013学年第1学期
学生所在系部计算机与信息管理系
年级2010专业班级计算机001班
学生姓名学号
任课教师
实验成绩
计算机系制
一个简单的文件系统的详细设计
一、实验目的
(1)阅读并调试一个简单的文件系统,模拟文件管理的工作过程。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
(2)了解设计一个n个用户的文件系统,每个用户可以保存M个文件。
用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令。
二、实验要求
1、阅读所给文件系统源程序,并加注释(注释量达60%),
2、修改、完善该系统,画出所设计的文件系统的详细流程图。
三、文件系统功能设计
1.功能设计
该文件系统是一个多用户、多任务的文件系统。
对用户和用户的文件数目并没有上限。
也就是说该系统允许任何用户申请空间,而且在其目录下的文件数目并不做任何的限制。
该系统可以支持的操作命令如下:
①bye——用户注销命令。
当使用该命令时,用户退出系统,注销该用户功能设计并回到登陆界面。
命令格式:
bye
②close——删除用户注册信息命令。
执行该命令后,用户在系统中的所有信息,包括该用户目录下的所有文件都被删除。
命令执行完成后返回登陆界面。
命令格式:
close
③create——在当前目录下创建一个文件,且该文件不能跟当前已有的文件重名。
该文件的管理信息登记在用户文件信息管理模块中。
执行完该命令后回到执行命令行。
命令格式:
create>file1
其中:
“>”符为提示符,file1为要创建的文件名。
④delete——删除当前用户目录下的一个文件,命令执行完毕返回至命令行。
命令格式:
delete>file1
其中:
file1为要删除的文件名。
⑤list——显示当前注册目录下的所有文件信息,包括文件名、文件长度、文件操作权限。
命令格式:
list
⑥chmod——改变某个文件的执行权限,但前提是该文件是该用户目录下的文件。
命令格式:
chmod>file1。
其中:
file1为要授权的文件名。
⑦open——在window界面下打开某个文件。
执行该命令后,文件file1将用在windows界面下的文件形式打开。
用户可以在这个方式中对文件进行修改,并将修改后的内容保存。
命令格式:
open>file1
其中:
file1为要打开的文件名。
⑧read——读文件信息。
将文件信息读入并显示在终端上。
命令格式:
read>file1
其中:
file1为要读的文件名。
⑨write——向某个文件写入新的信息。
用户可以选择用覆盖原来内容的方式或和在文件的末尾追加新信息的方式写入信息。
当要退出时输入“#”即可。
(2)系统采用二级文件目录。
设置主目录(MFD)和用户文件目录(UFD),分别以文件的方式保存在磁盘中。
在主目录中有注册用户的用户名和另一标志该用户目录下是否有文件的指针标记。
用户文件目录采用用户名作为文件名保存于磁盘,以便检索时方便对应。
在用户文件目录中保存着该目录下所有文件的文件名称、保护码、文件长度。
(3)该系统大量使用高级语言中的文件操作函数,所以能实际看到文件的创建、写入、读出、删除等效果。
2.功能设计实现总体流程
3.主要数据结构
4.主要功能模块
四、文件系统功能模块详细设计流程图
1.intLoginDisplay()//登陆选项操作函数
图1:
函数LoginDisplay()流程图
2.boolLogin(intSELETE)//用户登陆,注册函数
图2:
函数Login(intSELETE)流程图
3.voidDisplayUFD()//打印用户信息,包括用户的各个文件
图3:
函数DisplayUFD()流程图
4.voidByeFile(boolBOOL)//注销函数,调用此函数后用户可以退出系统
图4:
函数ByeFile(boolBOOL)流程图
5.boolClearUserFile()//用户要将自己的注册目录从系统彻底删除
图5:
函数ClearUserFile()流程图
6.voidClearUserMes()//删除用户全部信息
图6:
函数ClearUserMes()流程图
7.voidDeleteUser()//删除用户注册目录的操作
图7:
函数DeleteUser()流程图
8.voidCreatFile()//在当前用户目录下创建文件
图8:
函数CreatFile()流程图
9.voidDeleteFile()//删除当前目录下一个文件的操作
图9:
函数DeleteFile()流程图
10.boolQueryModElse(boolBOOL,bool&flag)//查询其它用户目录下的文件
图10:
函数QueryModElse(boolBOOL,bool&flag)流程图
11.boolQueryMod(boolBOOL)//查询权限
图11:
函数QueryMod(boolBOOL)流程图
12.boolWriteRight(intlen,boolBOOL)//查看是否已经正确地写入到该文件信息中,是则返回真值
图12:
函数WriteRight(intlen,boolBOOL)流程图
13.voidWriteLengthToFile(intLen,boolBOOL)//将文件长度写入文件管理模块中
图13:
函数WriteLengthToFile(intLen,boolBOOL)流程图
14.voidWriteFile()//向文件写入信息的操作
图14:
函数WriteFile()流程图
15.voidReadFile()//读文件函数
图15:
函数ReadFile()流程图
16.voidChangeMod()//修改某文件的执行权限
图16:
函数ChangeMod()流程图
17.voidExecute(inti,intlen,intcmdset)//执行命令函数
图17:
函数Execute()流程图
18.voidCommand()//读取用户输入的命令,并将其转换成系统能识别的命令
图18:
函数Command()流程图
5、实验运行结果
1、用户注册:
图19:
用户注册
2、创建文件:
图20:
创建文件
3、用户注册时重名:
图21:
用户注册时重名
4、已注册用户登陆,并打开文件进行写入操作:
图22:
已注册用户登陆,并打开文件进行写入操作
5、读出文件内容到终端:
图23:
读出文件内容到终端
6、删除文件:
图24:
删除文件
7、打印文件清单:
图25:
打印文件清单
8、修改用户权限:
图26:
修改用户权限
9、删除用户全部文件与信息:
图27:
删除用户全部文件与信息
10、退出系统:
图28:
退出系统
六、系统改进的设想与实现
1、修改内容说明:
(1)、对源程序中的函数进行了声明和排序(按首字母排列);
(2)、在登陆选项操作函数LoginDisplay()和修改文件权限函数ChangeMod()中添加了人性化提示语句,方便用户操作。
2、实现程序(用小六字体打印):
(1)、程序如下:
//--------------------------------函数声明------------------------------------------------------
voidByeFile(boolBOOL);//注销函数,调用此函数用户可以退出系统
voidChangeMod();//修改某文件的执行权限
voidClearUserMes();//删除用户全部信息
voidCommand();//读取用户输入的命令,并将其转换成系统能识别的命令
voidCreatFile();//在当前用户目录下创建文件
voidDeleteFile();//删除当前目录下一个文件的操作
voidDeleteUser();//删除用户注册目录的操作
voidDisplayUFD();//打印用户信息,包括用户的各个文件名称、长度和操作权限的设置信息
voidExecute(inti,intlen,intcmdset);//执行命令函数
voidKeyWord();//初始化命令关键字
voidListAllFile();//显示当前用户目录下的文件信息
voidOpenFile();//在window模式下打开该文件
voidReadFile();//读文件函数
voidWriteFile();//向文件写入信息的操作
voidWriteLengthToFile(intLen,boolBOOL);//将文件长度写入文件管理模块中
boolClearUserFile();//用户要将自己的注册目录从系统彻底删除,首先应将该用户目录下的全部文件删除
boolLogin(intSELETE);//用户登陆,注册函数。
boolQueryMod(boolBOOL);//查询权限
boolQueryModElse(boolBOOL,bool&flag);//查询其它用户目录下文件的文件
boolWriteRight(intlen,boolBOOL);//查看是否已经正确地写入到该文件信息中,若是,则返回真值
intLoginDisplay();//登陆选项操作函数(登陆界面模块)。
intmain();/*主函数声明,与其他函数声明一样,其功能是:
使编译器进行预编译时为主函数预留内存空间。
只有主函数可以不要声明,直接定义使用。
VC6.0里用voidmain();。
*/
(2)、程序如下:
A、登陆选项操作函数LoginDisplay()
system("cls");//清屏函数。
cout<<"*******欢迎使用本文件系统*******"<cout<<"*****您可以进行以下操作*****"<cout<<"**温馨提示:
输入操作序号,如“2”,再按回车键**\n**即可进入“用户注册”功能界面,下同。
**"<cout<<"\n*****请选择操作*****\n1、用户登陆2、用户注册0、退出"<cin>>SELETE_1;//键盘输入一个序号,如1、2、0。
B、修改文件权限函数ChangeMod()
cout<<"\n文件的权限值具体如下:
";
cout<<"\n30:
其他用户既没读权也没写权;";
cout<<"\n31:
其他用户没有读权但有写权;";
cout<<"\n32:
其他用户具有读权但没写权;";
cout<<"\n33:
其他用户既有读权也有写权。
\n";
cout<<"\n输入文件"<";
cin>>mod;//输入权限值
3、源程序(用小六字体打印):
/***************************