实验六文件系统设计结果.docx
《实验六文件系统设计结果.docx》由会员分享,可在线阅读,更多相关《实验六文件系统设计结果.docx(30页珍藏版)》请在冰豆网上搜索。
实验六文件系统设计结果
实验六文件系统设计
1.目的和要求
本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
2.实验内容
为DOS系统设计一个简单的二级文件系统,可以实现下列几条命令
DIR列文件目录
CREATE创建文件
DELETE删除文件
MODIFY修改文件
OPEN打开文件
CLOSE关闭文件
列目录时要列出文件名,物理地址,保护码和文件长度。
3.实验环境
①PC兼容机
②Windows、DOS系统、Turboc2.0
③C语言
4.实验提示
①首先应确定文件系统的数据结构:
主目录、活动文件等。
主目录文件的形式存放于磁盘,这样便于查找和修改。
主目录结构:
Ufdname用户名
Ufdfile指向用户的活动文件
活动文件结构:
Fpaddr文件物理地址
Flength文件长度
Fmode文件属性(filemode:
0-ReadOnly;1-WriteOnly;2-ReadandWrite(default))
Fname文件名称
②用户创建的文件,可以编号存储于磁盘上。
如:
file0,file1,file2…并以编号作为物理地址,在目录中进行登记。
③本程序需要在c:
下建一个名为osfile的目录及一个名为file的子目录,在利用程序创建了文件系统后,可以在这个文件夹下查看到相关的内容。
5.实验程序
#include"stdio.h"
#include"string.h"
#include"conio.h"
#include"stdlib.h"
#defineMAXNAME25/*thelargestlengthofmfdname,ufdname,filename*/
#defineMAXCHILD50/*thelargestchild*/
#defineMAX(MAXCHILD*MAXCHILD)/*thesizeoffpaddrno*/
typedefstruct/*thestructureofOSFILE*/
{
intfpaddr;/*filephysicaladdress*/
intflength;/*filelength*/
intfmode;/*filemode:
0-ReadOnly;1-WriteOnly;2-ReadandWrite(default);*/
charfname[MAXNAME];/*filename*/
}OSFILE;
typedefstruct/*thestructureofOSUFD*/
{
charufdname[MAXNAME];/*ufdname*/
OSFILEufdfile[MAXCHILD];/*ufdownfile*/
}OSUFD;
typedefstruct/*thestructureofOSUFD'LOGIN*/
{
charufdname[MAXNAME];/*ufdname*/
charufdpword[8];/*ufdpassword*/
}OSUFD_LOGIN;
typedefstruct/*fileopenmode*/
{
intifopen;/*ifopen:
0-close,1-open*/
intopenmode;/*0-readonly,1-writeonly,2-readandwrite,3-initial*/
}OSUFD_OPENMODE;
OSUFD*ufd[MAXCHILD];/*ufdandufdownfiles*/
OSUFD_LOGINufd_lp;
intucount=0;/*thecountofmfd'sufds*/
intfcount[MAXCHILD];/*thecountofufd'sfiles*/
intloginsuc=0;/*whetherloginsuccessfully*/
charusername[MAXNAME];/*recordloginuser'sname22*/
chardirname[MAXNAME];/*recordcurrentdirectory*/
intfpaddrno[MAX];/*recordfilephysicaladdressnum*/
OSUFD_OPENMODEifopen[MAXCHILD][MAXCHILD];/*recordfileopen/close*/
intwgetchar;/*whethergetchar()*/
FILE*fp_mfd,*fp_ufd,*fp_file_p,*fp_file;
voidmain()
{
inti,j,choice1;
charchoice[50];/*choiceoperation:
dir,create,delete,open,delete,modify,read,write*/
intchoiceend=1;/*whetherchoiceend*/
char*rtrim(char*str);/*removethetrailingblanks.*/
char*ltrim(char*str);/*removetheheadingblanks.*/
voidLoginF();/*LOGINFileSystem*/
voidDirF();/*DirFileSystem*/
voidCdF();/*ChangeDir*/
voidCreateF();/*CreateFile*/
voidDeleteF();/*DeleteFile*/
voidModifyFM();/*ModifyFileMode*/
voidOpenF();/*OpenFile*/
voidCloseF();/*CloseFile*/
voidReadF();/*ReadFile*/
voidWriteF();/*WriteFile*/
voidQuitF();/*QuitFileSystem*/
voidhelp();
if((fp_mfd=fopen("c:
\\osfile\\mfd","rb"))==NULL)
{
fp_mfd=fopen("c:
\\osfile\\mfd","wb");
fclose(fp_mfd);
}
for(i=0;i/*textattr(BLACK*16|WHITE);*/
/*clrscr();*//*clearscreen*/
LoginF();/*userlogin*/
/*clrscr();*/
if(loginsuc==1)/*LoginSuccessfully*/
{
while
(1)
{
wgetchar=0;
if(choiceend==1)
{
printf("\n\nC:
\\%s>",strupr(dirname));
}
elseprintf("Badcommandorfilename.\nC:
\\%s>",strupr(username));
gets(choice);
strcpy(choice,ltrim(rtrim(strlwr(choice))));
if(strcmp(choice,"dir")==0)choice1=1;
elseif(strcmp(choice,"create")==0)choice1=2;
elseif(strcmp(choice,"delete")==0)choice1=3;
elseif(strcmp(choice,"attrib")==0)choice1=4;
elseif(strcmp(choice,"open")==0)choice1=5;
elseif(strcmp(choice,"close")==0)choice1=6;
elseif(strcmp(choice,"read")==0)choice1=7;
elseif(strcmp(choice,"modify")==0)choice1=8;
elseif(strcmp(choice,"exit")==0)choice1=9;
elseif(strcmp(choice,"cls")==0)choice1=10;
elseif(strcmp(choice,"cd")==0)choice1=11;
elseif(strcmp(choice,"help")==0)choice1=20;
elsechoice1=12;
switch(choice1)
{
case1:
DirF();choiceend=1;break;
case2:
CreateF();choiceend=1;if(!
wgetchar)getchar();break;
case3:
DeleteF();choiceend=1;if(!
wgetchar)getchar();break;
case4:
ModifyFM();choiceend=1;if(!
wgetchar)getchar();break;
case5:
choiceend=1;OpenF();if(!
wgetchar)getchar();break;
case6:
choiceend=1;CloseF();if(!
wgetchar)getchar();break;
case7:
choiceend=1;ReadF();if(!
wgetchar)getchar();break;
case8:
choiceend=1;WriteF();if(!
wgetchar)getchar();break;
case9:
printf("\nYouhaveexitedthissystem.");
QuitF();exit(0);break;
case10:
choiceend=1;clrscr();break;
case11:
CdF();choiceend=1;break;
case20:
help();choiceend=1;break;
default:
choiceend=0;
}
}
}
elseprintf("\nAccessdenied.");
}
voidhelp(void)
{
printf("\nTheCommandList\n");
/*printf("\nCdAttribCreateModifyReadOpenClsDeleteExitClose\n");*/
printf("Create:
Createafile(Youcaninitializefile'sattributeandcontent.)\n");
printf("Open: