操作系统课程设计二级文件系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统课程设计报告
专业:计算机信息处理
学号:08201328
姓名:杨馨雨
提交日期:2011-7-14
【设计目的】
1.课程设计目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
2.结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。
3.通过对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力
【设计内容】
1、delete删除文件
2、open打开文件
3、close关闭文件
4、write写文件
【实验环境】
Windows7系统
Visualstudio2010
【相关知识综述】
本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。
另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。
首先应确定文件系统的数据结构:主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
用户创建的文件,可以编号存储于磁盘上。
如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记。
【设计思路】
1主要数据结构
#define MAXNAME25/*thelargestlengthofmfdname,ufdname,filename*/
#define MAXCHILD50/*thelargestchild每个用户名下最多有50个文件*/
#define MAX(MAXCHILD*MAXCHILD)/*thesizeoffpaddrno*/
typedefstruct/*thestructureofOSFILE定义主文件*/
{
int fpaddr;/*filephysicaladdress*/
int flength;/*filelength*/
int fmode;/*filemode:0-ReadOnly;1-WriteOnly;2-ReadandWrite;3-Protect;*/
char fname[MAXNAME];/*filename*/
}OSFILE;
typedefstruct/*thestructureofOSUFD定义用户文件目录*/
{
char ufdname[MAXNAME];/*ufdname*/
OSFILEufdfile[MAXCHILD];/*ufdownfile*/
}OSUFD;
typedefstruct/*thestructureofOSUFD'LOGIN定义登陆*/
{
char ufdname[MAXNAME];/*ufdname*/
char ufdpword[8];/*ufdpassword*/
}OSUFD_LOGIN;
typedefstruct/*fileopenmode定义操作方式*/
{
int ifopen;/*ifopen:0-close,1-open*/
int openmode;/*0-readonly,1-writeonly,2-readandwrite,3-initial*/
}OSUFD_OPENMODE;
2主要函数
void LoginF();/*LOGINFileSystem*/
void DirF();/*DirFileSystem*/
void CreateF();/*CreateFile*/
void DeleteF();/*DeleteFile*/
void ModifyFM();/*ModifyFileMode*/
void OpenF();/*OpenFile*/
void CloseF();/*CloseFile*/
void ReadF();/*ReadFile*/
void WriteF();/*WriteFile*/
void QuitF();/*QuitFileSystem*/
void CdF();/*ChangeDir*/
void help();
【主要程序段】
1Delete函数
voidDeleteF()/*DeleteFile*/
{charfname[MAXNAME],str[50],str1[50];
inti,k,j;
intfpaddrno1;
if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0)/*无法删除主目录的文件*/
{
printf("\.\n");
wgetchar=1;
}
if(strcmp(strupr(dirname),strupr(username))!=0)/*无法删除非自己目录的文件*/
{
printf("\.\n");
wgetchar=1;
}
else
{
printf("\nPleaseinputFileName:");
gets(fname);fopen==1)/*文件打开时无法删除*/
{
printf("\nError.\'%s\'.\n",fname);
wgetchar=1;
}
else
{
if(ufd[k]->ufdfile[i].fmode==3)/*被保护的文件无法删除*/
{
printf("\nError.\'%s\'.\n",fname);
wgetchar=1;
}
else
{
fpaddrno1=ufd[k]->ufdfile[i].fpaddr;xt");
remove(str);n",fname);
wgetchar=1;
}
}
}
else'%s\'dosenotexist.\n",fname);
wgetchar=1;
}
}
}
2Open函数
voidOpenF()/*OpenFile*/
{
charfname[MAXNAME];
inti,k,j;
if(strcmp(strupr(dirname),strupr(username))!=0)/*在自己的目录里才能打开*/
{
printf("\.\n");
wgetchar=1;
}
else
{
k=ExistD(username);
for(j=0;j<fcount[k];j++)
{
printf("%15s",ufd[k]->ufdfile[j].fname);
}
printf("\nPleaseinputFileName:");
gets(fname);fopen==1)'%s\'isinopenstatus.\n",fname);
wgetchar=1;
}
else
{
ifopen[k][i].ifopen=1;mode==0)/*根据文件的模式设置打开模式*/
{ifopen[k][i].openmode=0;}
elseif(ufd[k]->ufdfile[i].fmode==1)
{ifopen[k][i].openmode=1;}
elseif(ufd[k]->ufdfile[i].fmode==2)
{ifopen[k][i].openmode=2;}
elseifopen[k][i].openmode=3;
printf("\n\'%s\'isopenedsuccessfully\n",fname);
wgetchar=1;
}
}
else'%s\'dosenotexist.\n",fname);
wgetchar=1;
}
}
}
3Close函数
voidCloseF()/*CloseFile*/
{
charfname[MAXNAME];
inti,k,j;
if(strcmp(strupr(dirname),strupr(username))!=0)/*不在自己的目录里没法进行*/
{
printf("\.\n");
wgetchar=1;
}
else
{
k=ExistD(username);
for(j=0;j<fcount[k];j++)/*列出已经打开的文件*/ {
if(ifopen[k][j].ifopen==1)name);
}
printf("\nPleaseinputFileName:");
gets(fname);fopen=0;/*关闭文件*/
printf("\n\'%s\'closedsuccessfully\n",fname);
wgetchar=1;
}
else'%s\'dosenotexist.\n",fname);
wgetchar=1;
}
}
}
4Write函数
voidWriteF()/*WriteFile*/
{
inti,k,n=0;
intlength;
charfname[MAXNAME],values[1000];
charstr[255],str1[255],c;
if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0)n");
wgetchar=1;
return;
}
printf("\nCaution:Openfilefirst\n");
printf("OpenedFile(s)List:\n");
k=ExistD(dirname);fopen==1)name);
n++;
}
if((n%4==0)&&(n!=0))printf("\n");
}
printf("\n%dfilesopenned.\n",n);
if(n==0)wgetchar=1;fopen==1)penmode==1)||(ifopen[k][i].o penmode==2))paddr,str,10);xt");
fp_file=fopen(str,"ab");length=ufd[k]->ufdfile[i].flengt h+length;n",ufd[k]->ufdfile[i].flength);
printf("\n\nYouhavewritefilesuccessfully!!");
fclose(fp_file);
wgetchar=0;
}
elseif(ifopen[k][i].openmode==0)'%s\'\'twrite.\n",fname) ;
wgetchar=1;
}
else'%s\'\'twrite.\n",fname);
wgetchar=1;
}
}
else'%s\'\n",fname);
wgetchar=1;
}
}
else'%s\'doesnotexist.\n",fname);
wgetchar=1;
}
}
}
【程序流程设计】
1总的功能结构图:
2部分子模块程序流程图
(1)打开命令的程序流程图:
(2)关闭命令的程序流程图:
(3)写命令的程序流程图:
(4)删除命令的程序流程图:
【测试结果】
1删除文件
2打开的文件不能删除
3打开文件,其中已经打开的文件不能再次打开
3关闭文件
4写文件,其中只有打开了文件才能写入
5写文件
6只读文件和保护文件不能写入
7其他函数
【参考文献】
计算机操作系统,西安电子科技大学出版社,方敏主编, 【源程序清单】
#include""
#include""
#include""
#include""
#define MAXNAME25/*thelargestlengthofmfdname,ufdname,filename*/
#define MAXCHILD50/*thelargestchild每个用户名下最多有50个文件*/
#define MAX(MAXCHILD*MAXCHILD)/*thesizeoffpaddrno*/
typedefstruct/*thestructureofOSFILE定义主文件*/
{
int fpaddr;/*filephysicaladdress*/
int flength;/*filelength*/
int fmode;/*filemode:0-ReadOnly;1-WriteOnly;2-ReadandWrite;3-Protect;*/ char fname[MAXNAME];/*filename*/
}OSFILE;
typedefstruct/*thestructureofOSUFD定义用户文件目录*/
{
char ufdname[MAXNAME];/*ufdname*/
OSFILEufdfile[MAXCHILD];/*ufdownfile*/
}OSUFD;
typedefstruct/*thestructureofOSUFD'LOGIN定义登陆*/
char ufdname[MAXNAME];/*ufdname*/
char ufdpword[8];/*ufdpassword*/
}OSUFD_LOGIN;
typedefstruct/*fileopenmode定义操作方式*/
{
int ifopen;/*ifopen:0-close,1-open*/
int openmode;/*0-readonly,1-writeonly,2-readandwrite,3-protect*/
}OSUFD_OPENMODE;
void LoginF();/*LOGINFileSystem*/
void DirF();/*DirFileSystem*/
void CreateF();/*CreateFile*/
void DeleteF();/*DeleteFile*/
void ModifyFM();/*ModifyFileMode*/
void OpenF();/*OpenFile*/
void CloseF();/*CloseFile*/
void ReadF();/*ReadFile*/
void WriteF();/*WriteFile*/
void QuitF();/*QuitFileSystem*/
void CdF();/*ChangeDir*/
void help();
char*rtrim(char*str);/*removethetrailingblanks.*/
char*ltrim(char*str);/*removetheheadingblanks.*/
void InputPW(char*password);/*inputpassword,use'*'replace*/
int ExistD(char*dirname);/*WhetherDirNameExist,Exist-i,NotExist-0*/
int WriteF1();/*writefile*/
int ExistF(char*filename);/*WhetherFileNameExist,Exist-i,NotExist-0*/
void SetPANo(int RorW);/*Setphysicaladdressnum*/
int FindPANo();/*findoutphysicaladdressnum*/
int ucount=0;/*thecountofmfd'sufds用户数*/
int fcount[MAXCHILD];/*thecountofufd'sfiles子文件数*/
int loginsuc=0;/*whetherloginsuccessfully登陆成功*/
char username[MAXNAME];/*recordloginuser'sname22用户名*/
char dirname[MAXNAME];/*recordcurrentdirectory使用的用户目录*/
int fpaddrno[MAX];/*recordfilephysicaladdressnum物理地址号,存放自己所创建的所有文件的地址*/
int wgetchar;/*whethergetchar()*/
OSUFD*ufd[MAXCHILD];/*ufdandufdownfiles*/
OSUFD_LOGINufd_lp;;
QuitF();exit(0);break;
case10:clrscr();choiceend=1;break;
case11:CdF();choiceend=1;break;;
}
char*rtrim(char*str)/*removethetrailingblanks.去掉登陆用户名的尾空格*/
int n=strlen(str)-1;
while(n>=0)
{
if(*(str+n)!='')
{
*(str+n+1)='\0';
break;
}
else n--;
}
if(n<0)str[0]='\0';
return str;
}
char*ltrim(char*str)/*removetheheadingblanks.去掉登陆用户名的头空格*/ {
strrev(str);name),strupr(filename))==0)
{
exist=1;
break;
}
if(exist)return(i);
elsereturn(-1);
}
int FindPANo()/*findoutphysicaladdressnum*/
{
int i;
for(i=0;i<MAX;i++)
if(fpaddrno[i]==0)
{
fpaddrno[i]=1;
break;
}
if(i<MAX)return(i);
elsereturn(-1);
}
int WriteF1()/*writefile*/
{
int length=0;
char c;
printf("Pleaseinputtext(\'#\'standsforend):\n");
while((c=getchar())!='#')
{
fprintf(fp_file,"%c",c);
if(c!='\n')length++;
}
fprintf(fp_file,"\n");
fclose(fp_file);
return(length);
}
void LoginF()/*LOGINFileSystem登陆函数*/
{
char loginame[MAXNAME],loginpw[9],logincpw[9],str[50];xt");
ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));fopen=0;
ifopen[j][i].openmode=4;
}
fclose(fp_ufd);
}
fclose(fp_mfd);
ucount=j;
SetPANo(0);
printf("\n\nLoginsuccessful!WelcometothisFileSystem\n\n");
loginsuc=1;
return;
}
else xt");
if((fp_ufd=fopen(str,"rb"))==NULL)
{
fp_ufd=fopen(str,"wb");
fclose(fp_ufd);
}
fp_mfd=fopen("d:\\osfile\\","rb");
for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j++)
{
strcpy(str,"d:\\osfile\\");
strcat(str,;
strcat(str,".txt");
ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));
strcpy(ufd[j]->ufdname,strupr);
fp_ufd=fopen(str,"rb");
for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!=0;i++,fcount[j]++)fopen =0;
ifopen[j][i].openmode=4;
}
fclose(fp_ufd);
}
fclose(fp_mfd);
ucount=j;
SetPANo(0);
printf("\n\nLoginSuccessful!WelcometothisSystem\n\n");
loginsuc=1;
return;
}
else");
getch();
clrscr();
printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddress","FileLength","Type","Fil eMode");
}
itoa(ufd[j]->ufdfile[i].fpaddr,str,10);mode==0)strcpy(sfmode,"ReadOnly");
elseif(ufd[j]->ufdfile[i].fmode==1)strcpy(sfmode,"WriteOnly");
elseif(ufd[j]->ufdfile[i].fmode==2)strcpy(sfmode,"ReadAndWrite");
else strcpy(sfmode,"Protect");
printf("%14s%16s%14d%10s%18s\n",ufd[j]->ufdfile[i].fname,sfpaddr,ufd[j]->ufdfile[i] .flength,"<FILE>",sfmode);
}
printf("\n%3dfile(s)\n",fcount[j]);
}
else.");
getch();
clrscr();
printf("\n%14s%18s%8s\n","DirName","OwnFileCount","Type");
}
printf("%14s%18d%8s\n",ufd[i]->ufdname,fcount[i],"<UFD>");
count=count+fcount[i];
}
printf("\n%3ddir(s),%5dfile(s)\n",ucount,count);
}
}
void CreateF()/*CreateFile*/
{
int fpaddrno,flag=1,i;
char fname[MAXNAME],str[50],str1[50],a[25];
char fmode[25];
if(strcmp(strupr(dirname),strupr(username))!=0)n");
wgetchar=1;
}
else
{
printf("\nPleaseinputFileName:");
gets(fname);
ltrim(rtrim(fname));
if(ExistF(fname)>=0)
{
printf("\\'%s\'hasalreadyexisted.\n",fname);
wgetchar=1;
}
else
{
printf("PleaseinputFileMode(0-ReadOnly,1-WriteOnly,2-ReadandWrite,3-Protect):");
gets(fmode);
ltrim(rtrim(fmode));
if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strcmp(fmode,"2")==0)||(strcmp( fmode,"3")==0))
{
fpaddrno=FindPANo();
if(fpaddrno>=0)name,fname);paddr=fpaddrno;
ufd[i]->ufdfile[fcount[i]].fmode=atoi(fmode);
ifopen[i][fcount[i]].ifopen=0;
ifopen[i][fcount[i]].openmode=4;
strcpy(str,"d:\\osfile\\file\\file");
itoa(fpaddrno,str1,10);
strcat(str,str1);
strcat(str,".txt");
fp_file=fopen(str,"wb");
fclose(fp_file);
fcount[i]++;
while(flag)
{
printf("Inputtextnow(Y/N):");
gets(a);
ltrim(rtrim(a));
ufd[i]->ufdfile[fcount[i]-1].flength=0;
if(strcmp(strupr(a),"Y")==0)
{
fp_file=fopen(str,"wb+");length=WriteF1();
flag=0;
}
elseif(strcmp(strupr(a),"N")==0)
{
flag=0;
wgetchar=1;
}
}
printf("\n\'%s\'hasbeencreatedsuccessfully!\n",fname);
}
else
{
printf("\nFail!.\n");
wgetchar=1;
}
}
else
{
printf("\\'sRangeis0-3\n");
wgetchar=1;
}
}
}
}
void DeleteF()/*DeleteFile*/
{char fname[MAXNAME],str[50],str1[50];
int i,k,j;
int fpaddrno1;
if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0)/*无法删除主目录的文件*/
{
printf("\.\n");
wgetchar=1;
}
if(strcmp(strupr(dirname),strupr(username))!=0)/*无法删除非自己目录的文件*/ {
printf("\.\n");
wgetchar=1;
}
else
{
printf("\nPleaseinputFileName:");
gets(fname);fopen==1)/*文件打开时无法删除*/
{
printf("\nError.\'%s\'.\n",fname);
wgetchar=1;
}
else
{
if(ufd[k]->ufdfile[i].fmode==3)/*被保护的文件无法删除*/
{
printf("\nError.\'%s\'.\n",fname);
wgetchar=1;
}
else
{
fpaddrno1=ufd[k]->ufdfile[i].fpaddr;xt");
remove(str);n",fname);
wgetchar=1;
}
}
}
else'%s\'dosenotexist.\n",fname);
wgetchar=1;
}
}
}
void ModifyFM()/*ModifyFileMode*/
{
char fname[MAXNAME],str[50];
int i,k;
char fmode[25];/*whetherdelete*/
if(strcmp(strupr(dirname),strupr(username))!=0)
{
printf("\.\n");
wgetchar=1;
}
else
{
printf("\nPleaseinputFileName:");
gets(fname);
ltrim(rtrim(fname));
i=ExistF(fname);
if(i>=0)
{
k=ExistD(username);
if(ifopen[k][i].ifopen==1)
{
printf("\nError.\'%s\'.\n",fname);
wgetchar=1;
}
else
{
if(ufd[k]->ufdfile[i].fmode==0)strcpy(str,"readonly");/*FileMode*/
elseif(ufd[k]->ufdfile[i].fmode==1)strcpy(str,"writeonly");
elseif(ufd[k]->ufdfile[i].fmode==2)strcpy(str,"readandwrite");
else strcpy(str,"Protect");
printf("\'%s\'filemodeis%s.\n",fname,strupr(str));
printf("Modifyto(0-readonly,1-writeonly,2-readandwrite,3-Protect):");
gets(fmode);
ltrim(rtrim(fmode));
if(strcmp(fmode,"0")==0)
{
ufd[k]->ufdfile[i].fmode=0;
printf("\n\'%s\'hasbeenmodifiedtoREADONLYmodesuccessfully.\n",fname);
wgetchar=1;
}
elseif(strcmp(fmode,"1")==0)
{
ufd[k]->ufdfile[i].fmode=1;
printf("\n\'%s\'hasbeenmodifiedtoWRITEONLYmodesuccessfully.\n",fname);
wgetchar=1;
}
elseif(strcmp(fmode,"2")==0)
{
ufd[k]->ufdfile[i].fmode=2;
printf("\n\'%s\'hasbeenmodifiedtoREADANDWRITEmodesuccessfully.\n",fname);
wgetchar=1;
}
elseif(strcmp(fmode,"3")==0)
{
ufd[k]->ufdfile[i].fmode=3;
printf("\n\'%s\'hasbeenmodifiedtoFORBIDmodesuccessfully.\n",fname);
wgetchar=1;
}
else
{
printf("\nError.\'%s\'isnotmodified.\n",fname);
wgetchar=1;
}
}
}
else
{
printf("\nError.\'%s\'dosenotexist.\n",fname);
wgetchar=1;
}
}
}
void OpenF()/*OpenFile*/
{
char fname[MAXNAME];
int i,k,j;
if(strcmp(strupr(dirname),strupr(username))!=0)/*在自己的目录里才能打开*/ {
printf("\.\n");
wgetchar=1;
}
else
{
k=ExistD(username);
for(j=0;j<fcount[k];j++)
{
printf("%15s",ufd[k]->ufdfile[j].fname);
}
printf("\nPleaseinputFileName:");
gets(fname);fopen==1)'%s\'isinopenstatus.\n",fname);
wgetchar=1;
}
else
{
ifopen[k][i].ifopen=1;mode==0)/*根据文件的模式设置打开模式*/
{ifopen[k][i].openmode=0;}
elseif(ufd[k]->ufdfile[i].fmode==1)
{ifopen[k][i].openmode=1;}
elseif(ufd[k]->ufdfile[i].fmode==2)
{ifopen[k][i].openmode=2;}
else ifopen[k][i].openmode=3;
printf("\n\'%s\'isopenedsuccessfully\n",fname);
wgetchar=1;
}
}
else'%s\'dosenotexist.\n",fname);
wgetchar=1;
}
}
}
void CloseF()/*CloseFile*/
{
char fname[MAXNAME];
int i,k,j;
if(strcmp(strupr(dirname),strupr(username))!=0)/*不在自己的目录里没法进行*/ {
printf("\.\n");
wgetchar=1;
}
else
{
k=ExistD(username);
for(j=0;j<fcount[k];j++)/*列出已经打开的文件*/
{
if(ifopen[k][j].ifopen==1)name);
}
printf("\nPleaseinputFileName:");
gets(fname);fopen=0;'%s\'dosenotexist.\n",fname);
wgetchar=1;
}
}
}
void ReadF()/*ReadFile*/
{
int i,k,n=0;
char fname[MAXNAME];
char str[255],str1[255],c;
if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0)n");
wgetchar=1;
return;
}
printf("\nCaution:Openfilefirst\n");
printf("OpenedFile(s)List:\n");
k=ExistD(dirname);
for(i=0;i<fcount[k];i++)
{
if(ifopen[k][i].ifopen==1)name);
n++;
}
if((n%4==0)&&(n!=0))printf("\n");
}
printf("\n%dfilesopenned.\n",n);
if(n==0)wgetchar=1;fopen==1)
{
if((ifopen[k][i].openmode==0)||(ifopen[k][i].openmode==2))paddr,str,10);
strcpy(str1,"file");
strcat(str1,str);
strcpy(str,"d:\\osfile\\file\\");
strcat(str,str1);
strcat(str,".txt");
fp_file=fopen(str,"rb");
fseek(fp_file,0,0);
printf("\nThetextis:\n\n");
printf("");
while(fscanf(fp_file,"%c",&c)!=EOF)
if(c=='\n')printf("\n");
else printf("%c",c);
printf("\n\n%dLength.\n",ufd[k]->ufdfile[i].flength);
fclose(fp_file);
wgetchar=1;
}
elseif(ifopen[k][i].openmode==1)'%s\'\'tread.\n",fname);
wgetchar=1;
}
else'%s\'\'tread.\n",fname);
wgetchar=1;
}
}
else
{
printf("\nError.\'%s\'\n",fname);
wgetchar=1;
}
}
else
{
printf("\nError.\'%s\'doesnotexist.\n",fname);
wgetchar=1;
}
}
}
void WriteF()/*WriteFile*/
{
int i,k,n=0;
int length;
char fname[MAXNAME],values[1000];
char str[255],str1[255],c;
if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0)n");
wgetchar=1;
return;
}
printf("\nCaution:Openfilefirst\n");
printf("OpenedFile(s)List:\n");
k=ExistD(dirname);fopen==1)name);
n++;
}
if((n%4==0)&&(n!=0))printf("\n");
}
printf("\n%dfilesopenned.\n",n);
if(n==0)wgetchar=1;fopen==1)penmode==1)||(ifopen[k][i].openmode==2))paddr,str,10);x t");
fp_file=fopen(str,"ab");length=ufd[k]->ufdfile[i].flength+length;n",ufd[k]->ufdfile [i].flength);
printf("\n\nYouhavewritefilesuccessfully!!");
fclose(fp_file);
wgetchar=0;
}
elseif(ifopen[k][i].openmode==0)'%s\'\'twrite.\n",fname);
wgetchar=1;
}
else'%s\'\'twrite.\n",fname);
wgetchar=1;
}
}
else'%s\'\n",fname);
wgetchar=1;
}
}
else'%s\'doesnotexist.\n",fname);
wgetchar=1;
}
}
}
void QuitF()/*QuitFileSystem*/
{
int i,j;
char str[50];
SetPANo(1);
if(fp_mfd!=NULL)fclose(fp_mfd);xt");
fp_ufd=fopen(str,"wb");
fclose(fp_ufd);
fp_ufd=fopen(str,"ab");
for(i=0;i<fcount[j];i++)
fwrite(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd);
fclose(fp_ufd);
}
}
void CdF()/*ExchangeDir更换用户*/
{
char dname[MAXNAME];
printf("\nPleaseinputDirName:");
gets(dname);
ltrim(rtrim(dname));
if(ExistD(dname)>=0)strcpy(dirname,strupr(dname));
else
if(strcmp(strupr(dname),"CD..")==0)strcpy(ltrim(rtrim(dirname)),"");
else printf("\nError.\'%s\'doesnotexist.\n",dname);
}
void help(void)
{
printf("\nTheCommandList\n");
printf("\nCdAttribCreatewriteReadOpenClsDeleteExitClose\n");
}
【设计总结】
UNIX系统中的文件系统是人们最感兴趣的,也是最成功的一部分。
它既有很强的功能,又非常灵活,而且在具体的实现技术上也有许多独到之处,致使后来有不少操作系统的设计者都仿效了UNIX操作系统中的文件系统去开发自己的文件系统。
而对于我来说,这种最灵活的知识却是最难掌握的。
也因为对其基本知识掌握的不好,在这一次的设计过程中遇到很多的困难,特别是物理盘块和逻辑文件之间的对应。
在经过与同学进行沟通和交流并反复的测试之后,才明白了设计的函数,而且完善了部分函数的主要功能。
通过两星期的操作系统课程设计实习,让我对Linux文件系统有了深层次的了解和掌握,也通过了自己的能力体会到了编程的乐趣。
最重要的是学会了关于设计分析和以前C++语言学习过程中没有及时巩固的知识,对C++程序设计又有了更进一步的认识,对一些细节的结构体语句有了更深刻的理解。
所以这是一次很难得的实践机会,让我真正用心编程,学到了课本以外更深刻更重要的实践经验。
非常感谢老师提供这次机会,在这个课程设计过程中我受益匪浅,希望以后在这样的锻炼中不断成长,提高自己各方面的能力。