一个简单的文件系统的详细设计操作系统课程设计.docx
- 文档编号:4031570
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:20
- 大小:62.17KB
一个简单的文件系统的详细设计操作系统课程设计.docx
《一个简单的文件系统的详细设计操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《一个简单的文件系统的详细设计操作系统课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
一个简单的文件系统的详细设计操作系统课程设计
运算机系综合性实验
实验报告
课程名称操作系统实验报告
一个简单的文件系统的详细设计
一个简单的文件系统的详细设计
一、实验目的
(1)阅读并调试一个简单的文件系统,模拟文件治理的工作进程。
从而对各类文件操作命令的实质内容和执行进程有比较深切的了解。
(2)了解设计一个n个用户的文件系统,每一个用户能够保留M个文件。
用户在一次运行中只能打开一个文件,对文件必需设置爱惜方法,且至少有create、delete、open、close、read、write等命令。
二、实验要求
一、依照流程图阅读所给文件系统源程序,并对源程序加以注释(注释量达70%以上)。
二、修改、完善该系统,指出程序的bug。
三、文件系统功能设计
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.要紧数据结构
structUFD
{
structMFD
{*curuser=NULL,*elseuser=NULL;这两个是主文件的结构体变量,用于访问结构体里面的数据成员
4.要紧功能模块
1.intLoginDisplay()boolLogin(intSELETE)voidDisplayUFD()voidByeFile(boolBOOL)boolClearUserFile()voidClearUserMes()voidDeleteUser()voidCreatFile()voidDeleteFile()boolQueryModElse(boolBOOL,bool&flag)
boolQueryMod(boolBOOL)boolWriteRight(intlen,boolBOOL)
voidWriteLengthToFile(intLen,boolBOOL)
voidWriteFile()voidReadFile()voidChangeMod()voidExecute(inti,intlen,intcmdset)voidCommand()
intLoginDisplay()
Y
N
ScanfSELETE_1
ReturnSELETE_1
0<=SELETE_1<=2?
Begin
End
图1LoginDisplay
boolLogin(intSELETE)
Other
N
Y
N
Y
N
Y
2
1
SELETE
SearchMFD(图
Ture?
ReturnTure
ReturnFalse
Scanfname
Begin
?
SearchMFD(图
Ture?
Fwritename
Creat
End
图2Login
Scanfname
N
Y
N
Y
此模块重复调用,因此单独列出,到文件尾时仍未找到同名文件/用户名返回False,反之返回True
搜索xFD
图SearchxFD
Temp=Malloc(xFD)
EOF?
ReturnTure
ReturnFalse
Begin
Fread(temp,xFD,1,file/
Temp=Name
Buffer
End
voidDisplayUFD()
Y
N
N
N
Y
Y
Begin
Filepoint
EOF
Temp=Malloc(UFD)
Fread(temp,UFD,1,
CoutTemp
CoutNoFile
End
图3DisplayUFD
voidByeFile(boolBOOL)
Y
Y
N
N
Update(True)MFD(图
Begin
Remove
>
End
Couterror
图4ByeFile
N
Y
Y
N
Y
N
Begin
此模块重复调用,因此单独列出,更新xFD
Update为True只更新,反之会进行删除操作
Temp=Malloc(xFD)
EOF
Fread(Temp,xFD,1,file/
Temp=username
Buffer
Update
Fwrite(Temp,xFD,1,
End
图UpdatexFD
boolClearUserFile()
N
Y
Y
N
Begin
File=
File
EOF
Temp=Malloc(UFD)
Fread(Temp,UFD,1,file)
RemoveTemp->file
ReturnTrue
End
图5ClearUserFile
voidClearUserMes()
Name=
RemoveName
Update(False)MFD(图
End
图6ClearUserMes
Begin
intDeleteUser()
Other
Y
‘Y’||‘y’
End
图7DeleteUser
Begin
ch
Scanfch
R
R=ClearUserFile(图5)
ClearUserMes(图6)
Return1
voidCreatFile()
N
Other
N
‘Y’||‘y’
Y
Y
Begin
Buffer
ScanfCh
Fread(NewFile,UFD,1,
Server&SetBuffer
Couterror
End
图8CreatFile
CanWrite
Ch
ScanfBuffer
CoutTure
NewFile=Malloc(UFD)
voidDeleteFile()
Other
N
‘Y’||‘y’
N
Y
Y
Begin
Ture?
Ch
ScanfCh
RemoveBuffer
End
图9DeleteFile
SearchUFD(图
Update(False)UFD(图
boolQueryModElse(boolBOOL,bool&flag)
N
N
N
N
Y
Y
Y
31||33
Y
Y
N
N
Y
Begin
=Buffer
Couterror
Fread(Temp,UFD,1,
ReturnTrue
End
图10QueryModElse
EOF?
Temp?
ReturnFalse
Temp=Malloc(UFD)
BOOL
32||33
boolQueryMod(boolBOOL)
N
N
Y
Y
N
Y
N
N
N
Y
Y
Begin
EOF
Fread(temp,UFD,1,
ReturnTrue
Else=Malloc(MFD)
End
图11QueryMod
buffer
temp=Malloc(UFD)
EOF
Fread(Else,MFD,1,
Username=Else
Ture
QueryModElse(图10)
ReturnFalse
boolWriteRight(intlen,boolBOOL)
N
Y
N
N
Y
Y
N
Y
N
N
Y
Y
Begin
EOF
Fread(temp,UFD,1,
Length=len
ReturnFalse
End
图12WriteRight
temp=Malloc(UFD)
Buffer
Fwrite(temp,UFD,1,
Length+len
EOF
Buffer
Fread(temp,UFD,1,
BOOL
Remove
->
ReturnTure
voidWriteLengthToFile(intLen,boolBOOL)
N
Y
Y
Y
N
N
Begin
Fread(Else,MFD,1,
End
Couterror
图13WriteLengthToFile
Else=Malloc(MFD)
EOF
WriteRight(图12)
True?
voidWriteFile()
N
N
2
Other
Y
Y
2
1
Y
Y
N
N
Begin
Buffer
End
Getchar
图14WriteFile
ScanfChmod
Chmod
QueryMod(true)(图11)
True?
Char!
=#
Fput(char,buffer)
Getchar
Char!
=#
Fput(char,buffer)
WriteLength
ToFile(图11)
Couterror
voidReadFile()
N
Y
Y
Y
N
N
Begin
True?
Putchar(ch)
End
Couterror
图15ReadFile
Fgetchar(buffer)
Buffer
QueryMod(False)(图12)
EOF?
voidChangeMod()
Other
Y
N
‘Y’||‘y’
Begin
True?
ScanfMod
End
Couterror
图16ChangeMod
PrintfModTest
Ch
SearchUFD(图
Scanfch
UpdateUFD(图
Remove
>
intExecute(inti,intlen,intcmdset)
9
8
7
6
5
4
2
3
1
N
Y
N
Y
Begin
Cmd[i]!
=0
Buffer[i]=Cmd[i]
End
Couterror
图17Execute
ListAllFile
Buffer?
ChangeMod(图16)
ByeFile(图4)
OpenFile
ReturnTemp
cmdset
DeleteUser(图7)
CreatFile(图8)
DeleteFile(图9)
ReadFile(图15)
WriteFile(图14)
voidCommand()
Y
N
Y
N
Y
N
Y
Begin
1
Scanfcmd
End
图18Command
Buffer[i]=cmd[i]
‘>’||‘’||len-1
Cmdset=0||mid
二分查找命令编号
Cmdset
EndIt?
Execute(图17)
xe");xe");xe
if((fp=fopen(filename,"rb"))==NULL)xe");xe
if((fp=fopen(file,"rb"))==NULL)xe");xe
remove(name);xt");xt
fclose(fp);xe");xe
curfile=getspace(UFD);xe");xe
if((infile=fopen(in,"rb"))==NULL)xe");xe
if((fp=fopen(user,"rb"))==NULL){xe");xe
if((fp=fopen(user,"rb"))==NULL){xe");xe
if((fp=fopen(user,"rb"))==NULL)xe
if((fp1=fopen(outfile,"wb+"))==NULL)xe");xe
strcpy(out,"");xt");xt
switch(cmdset)
{
case1:
xt"))==0)xt"))==0)xt"))==0)xt"))==0)xt"))==0)xt"))==0).";
cmdset=0;break;
}
else{cmdset=mid;break;}
}
else{
buffer[j]=cmd[i];
j++;
}
}
if(cmdset==0)continue;
while(cmd[i]=='>'||cmd[i]==''){i++;}//过滤空格键和'>'
buffer[0]='\0';
Execute(i,len,cmdset);//执行该命令
}
}
//------------------------------------------------------------------------------------------------
voidmain()
{
while
(1){
intSELETE=LoginDisplay();//调用登陆选项操作函数
if(SELETE==0)//若是选择0
exit(0);//退出系统
boolBOOL=Login(SELETE);//用户登陆,或者注册函数
if(BOOL)
{
KeyWord();//初始化命令关键字
DisplayUFD();//打印用户目录下的文件
Command();//命令行操作
}
}
}
运行结果:
六、系统改良的假想与实现
一、修改内容说明
(1)bye函数实现后可正常进入登录界面
(2)close函数实现后可正常进入登录界面
二、实现程序(加注释)。
(1)bye函数实现后可正常进入登录界面
case1:
//退出
ByeFile(true);
SELETE=LoginDisplay();//返回登陆页面
if(SELETE==0)//若是选项是0
exit(0);//退出
Login(SELETE);//用户登陆,或者注册函数
(2)close函数实现后可正常进入登录界面
DeleteUser();
SELETE=LoginDisplay();//返回登岸页面
if(SELETE==0)//若是选项是0
exit(0);//退出
Login(SELETE);//用户登岸,或注册函数//挪用删除用户函数
break;
七、实验总结
本次操作系统课程设计实习课让我对C++、数据结构、操作系统的学习又有了更深切的了解,也让我们更深刻地领会到了“实践出真理”那个道理,在上机实践进程中学到的知识远远超过了在课堂上十几周学到的,系里组织的这次实习让咱们这些实践知识匮乏的大学生增添了许多社会体会,为咱们以后走上工作职位其了不小的铺垫作用。
在开始进行课程设计的时候,咱们认真阅读课程设计的相关要求,总希望自己的文件系统也多一些功能加倍的完善。
可是渐渐的我发觉编写一个优秀的程序决不是一蹴而就的情形,需要长时刻的积存和体会,而那个方面又是咱们的弱项。
因此咱们团队分析自己的实力合理分工,不要贪图大而全,只要尽我所能,编制一个有效简单的文件系统。
课程设计中碰到了很多以前没有碰到过的问题,咱们团队认真的写程序加注释和了解文件系统的相关功能。
在咱们的尽力下,咱们顺利的终止了本次实习,让咱们明白原先凭借自己尽力取得的成功会让自己这么欣慰,也让咱们明白了友谊和团结的重要性。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一个 简单 文件系统 详细 设计 操作系统 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)