实验六 文件系统设计Word文档下载推荐.docx
《实验六 文件系统设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验六 文件系统设计Word文档下载推荐.docx(39页珍藏版)》请在冰点文库上搜索。
0-ReadOnly;
1-WriteOnly;
2-ReadandWrite(default))
Fname文件名称
②用户创建的文件,可以编号存储于磁盘上。
如:
file0,file1,file2…并以编号作为物理地址,在目录中进行登记。
③本程序需要在c:
下建一个名为osfile的目录及一个名为file的子目录,在利用程序创建了文件系统后,可以在这个文件夹下查看到相关的内容。
5.实验程序
#include"
stdio.h"
string.h"
conio.h"
stdlib.h"
#defineMAXNAME25/*thelargestlengthofmfdname,ufdname,filename*/
#defineMAXCHILD50/*thelargestchild*/
#defineMAX(MAXCHILD*MAXCHILD)/*thesizeoffpaddrno*/
typedefstruct/*thestructureofOSFILE*/
{
intfpaddr;
/*filephysicaladdress*/
intflength;
/*filelength*/
intfmode;
/*filemode:
2-ReadandWrite(default);
*/
charfname[MAXNAME];
/*filename*/
}OSFILE;
typedefstruct/*thestructureofOSUFD*/
charufdname[MAXNAME];
/*ufdname*/
OSFILEufdfile[MAXCHILD];
/*ufdownfile*/
}OSUFD;
typedefstruct/*thestructureofOSUFD'
LOGIN*/
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("
wb"
);
fclose(fp_mfd);
}
for(i=0;
i<
MAX;
i++)fpaddrno[i]=0;
/*textattr(BLACK*16|WHITE);
/*clrscr();
*//*clearscreen*/
LoginF();
/*userlogin*/
if(loginsuc==1)/*LoginSuccessfully*/
{
while
(1)
{
wgetchar=0;
if(choiceend==1)
printf("
\n\nC:
\\%s>
"
strupr(dirname));
}
elseprintf("
Badcommandorfilename.\nC:
strupr(username));
gets(choice);
strcpy(choice,ltrim(rtrim(strlwr(choice))));
if(strcmp(choice,"
dir"
)==0)choice1=1;
elseif(strcmp(choice,"
create"
)==0)choice1=2;
delete"
)==0)choice1=3;
attrib"
)==0)choice1=4;
open"
)==0)choice1=5;
close"
)==0)choice1=6;
read"
)==0)choice1=7;
modify"
)==0)choice1=8;
exit"
)==0)choice1=9;
cls"
)==0)choice1=10;
cd"
)==0)choice1=11;
help"
)==0)choice1=20;
elsechoice1=12;
switch(choice1)
case1:
DirF();
choiceend=1;
break;
case2:
CreateF();
if(!
wgetchar)getchar();
//创建文件
case3:
DeleteF();
wgetchar)getchar();
//删除文件
case4:
ModifyFM();
//修改文件
case5:
OpenF();
if(!
//打开文件case6:
CloseF();
//关闭文件
case7:
ReadF();
//读文件
case8:
WriteF();
//写文件
case9:
printf("
\nYouhaveexitedthissystem."
//提示你已经退出这个系统了
QuitF();
exit(0);
//退出系统
case10:
clrscr();
//清屏
case11:
CdF();
case20:
help();
//帮助
default:
choiceend=0;
}
elseprintf("
\nAccessdenied."
}
voidhelp(void)
printf("
\nTheCommandList\n"
/*printf("
\nCdAttribCreateModifyReadOpenClsDeleteExitClose\n"
Create:
Createafile(Youcaninitializefile'
sattributeandcontent.)\n"
Open:
Openafiletomodify\n"
Close:
Closeafile.\n"
Modify:
Modifytheopenedfile.\n"
Delete:
Deleteexistedfiles.\n"
CD:
Changecurrentdirectory.\n"
Exit:
Exitthisprogram.\n"
char*rtrim(char*str)/*removethetrailingblanks.*/
intn=strlen(str)-1;
while(n>
=0)
if(*(str+n)!
='
'
)
*(str+n+1)='
\0'
;
break;
elsen--;
if(n<
0)str[0]='
returnstr;
char*ltrim(char*str)/*removetheheadingblanks.*/
strrev(str);
rtrim(str);
returnstr;
voidLoginF()/*LOGINFileSystem*/
charloginame[MAXNAME],loginpw[9],logincpw[9],str[50];
inti,j,flag=1;
chara[25];
intfindout;
/*loginusernotexist*/
voidInputPW(char*password);
/*inputpassword,use'
*'
replace*/
voidSetPANo(intRorW);
/*Setphysicaladdressnum*/
while
(1)
findout=0;
printf("
\n\nLoginName:
gets(loginame);
ltrim(rtrim(loginame));
for(i=0;
fread(&
ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!
=0;
i++)
if(strcmp(strupr(ufd_lp.ufdname),strupr(loginame))==0)
findout=1;
strcpy(logincpw,ufd_lp.ufdpword);
fclose(fp_mfd);
if(findout==1)/*userexist*/
printf("
LoginPassword:
InputPW(loginpw);
if(strcmp(loginpw,logincpw)==0)
strcpy(username,strupr(loginame));
strcpy(dirname,username);
fp_mfd=fopen("
for(j=0;
j++)
{
strcpy(str,"
\\osfile\\"
strcat(str,ufd_lp.ufdname);
ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));
strcpy(ufd[j]->
ufdname,strupr(ufd_lp.ufdname));
fp_ufd=fopen(str,"
fcount[j]=0;
for(i=0;
ufd[j]->
ufdfile[i],sizeof(OSFILE),1,fp_ufd)!
i++,fcount[j]++)
ifopen[j][i].ifopen=0;
ifopen[j][i].openmode=4;
}
fclose(fp_ufd);
fclose(fp_mfd);
ucount=j;
SetPANo(0);
\n\nLoginsuccessful!
WelcometothisFileSystem\n\n"
loginsuc=1;
return;
else
\n\n"
flag=1;
while(flag)
LoginFailed!
PasswordError.TryAgain(Y/N):
gets(a);
ltrim(rtrim(a));
if(strcmp(strupr(a),"
Y"
)==0){loginsuc=0;
flag=0;
elseif(strcmp(strupr(a),"
N"
)==0){loginsuc=0;
return;
else
NewPassword(<
=8):
InputPW(loginpw);
/*inputnewpassword,use'
\nConfirmPassword(<
InputPW(logincpw);
strcpy(ufd_lp.ufdname,strupr(loginame));
strcpy(ufd_lp.ufdpword,loginpw);
ab"
fwrite(&
ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd);
strcpy(username,strupr(loginame));
strcpy(dirname,loginame);
strcpy(str,"
strcat(str,username);
if((fp_ufd=fopen(str,"
for(i=0;
ucount=j;
SetPANo(0);
\n\nLoginSuccessful!
WelcometothisSystem\n\n"
loginsuc=1;
return;
voidSetPANo(intRorW)/*Setphysicaladdressnum,0-read,1-write*/
inti,j;
if(RorW==0)
if((fp_file_p=fopen("
\\osfile\\file\\file_p"
fp_file_p=fopen("
fclose(fp_file_p);
j,sizeof(int),1,fp_file_p)!
fpaddrno[j]=1;
/*for(i=1;
if((i%13)==0)fpaddrno[i]=1;
/*for(i=1;
if((i%13)==0)fpaddrno[i]=0;
for(i=