操作系统-二级文件系统(报告+源代码)天津科技大学.doc
- 文档编号:14664515
- 上传时间:2023-06-25
- 格式:DOC
- 页数:42
- 大小:766KB
操作系统-二级文件系统(报告+源代码)天津科技大学.doc
《操作系统-二级文件系统(报告+源代码)天津科技大学.doc》由会员分享,可在线阅读,更多相关《操作系统-二级文件系统(报告+源代码)天津科技大学.doc(42页珍藏版)》请在冰点文库上搜索。
操作系统课程设计报告11103303程路峰
操作系统课程设计报告
专业:
软件工程
学号:
11103303
姓名:
程路峰
提交日期:
2014/1/2
【设计目的】
1、本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
2、结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。
……………………………………..
【设计内容】
为Linux系统设计一个简单的二级文件系统。
要求做到以下几点:
①可以实现下列几条命令:
login用户登录
dir列目录
Attrib修改文件属性
create创建文件
delete删除文件
open打开文件
close关闭文件
read读文件
write写文件
cd进出目录
②列目录时要列出文件名,物理地址,保护码和文件长度
③源文件可以进行读写保护
………………………………….
【实验环境】
Windows7操作平台
VisualStudio2010
【相关知识综述】
理解二级目录的文件系统的组织;掌握常用的数据结构;系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件;使用文件来模拟外存,进行数据结构设计和操作算法的设计,实现一个文件系统并实现基本的文件操作(为了简便文件系统,不考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容)。
【设计思路】
采用的数据结构、主要的函数说明、程序流程设计等
本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。
另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。
首先应确定文件系统的数据结构:
主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
用户创建的文件,可以编号存储于磁盘上。
如:
file0,file1,file2…并以编号作为物理地址,在目录中进行登记
1.主要的数据结构
#defineMAXNAME25/*thelargestlengthofmfdname,ufdname,filename表示三种文件的长度都为25*/
#defineMAXCHILD50/*thelargestchild每个用户下可以有50个文件*/
#defineMAX(MAXCHILD*MAXCHILD)/*thesizeoffpaddrno定义一个常量2500个扇区*/
typedefstruct/*thestructureofOSFILE*/
{
intfpaddr;/*filephysicaladdress物理地址*/
intflength;/*filelength文件长度*/
intfmode;/*filemode:
0-ReadOnly;1-WriteOnly;2-ReadandWrite;3-Protect;*/
charfname[MAXNAME];/*filename文件名*/
}OSFILE;
typedefstruct/*thestructureofOSUFD*/
{
charufdname[MAXNAME];/*ufdname*/
OSFILEufdfile[MAXCHILD];/*ufdownfile*/
}OSUFD;/*osf文件的数据结构*/
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;
2.主要函数
voidLoginF();/*LOGINFileSystem*/
voidDirF();/*DirFileSystem*/
voidCdF();/*ChangeDir*/
voidCreateF();/*CreateFile*/
voidDeleteF();/*DeleteFile*/
voidModifyFM();/*ModifyFileMode*/
voidOpenF();/*OpenFile*/
voidCloseF();/*CloseFile*/
voidReadF();/*ReadFile*/
voidWriteF();/*WriteFile*/
voidQuitF();/*QuitFileSystem退出文件系统*/
voidhelp();
3.总体功能程序结构图
①打开命令的程序流程图②关闭命令的程序流程图
③写命令程序流程图
④删除命令的程序流程图:
【部分源程序清单】
打开函数
voidOpenF()
{
intfc,i;
charfname[MAXNAME],fmode[25];
intfm;
printf("\nPleaseinputFileName:
");
gets(fname);
ltrim(rtrim(fname));
if(ExistF(fname)<0) {
printf("\nError.Name\'%s\'isnotexisted.\n",fname);
wgetchar=1; }
else
{
i=ExistD(username);
for(inta=0;a { if(strcmp(fname,ufd[i]->ufdfile[a].fname)==0) { fc=a; break; } } ifopen[i][fc].ifopen=1; printf("PleaseinputOpenMode(0-ReadOnly,1-WriteOnly,2-ReadandWrite,3-Protect): "); gets(fmode); fm=atoi(fmode); ifopen[i][fc].openmode=fm; printf("\nOpensuccessed"); wgetchar=1; } } 关闭函数 voidCloseF() { charfname[MAXNAME]; inti,k; if(strcmp(strupr(dirname),strupr(username))! =0) { printf("\nError.Youcanonlymodifyfilemodeinyourselfdir.\n"); } else { printf("\nPleaseinputFileName: "); gets(fname); ltrim(rtrim(fname)); i=ExistF(fname); if(i>=0) { k=ExistD(username); if(ifopen[k][i].ifopen==0) { printf("\nError.\'%s\'hasbeenclosed.youcannotcloseitagain.\n",fname); } else { ifopen[k][i].ifopen=0; ifopen[k][i].openmode=4; printf("\'%s\'hasbeenclosedsuccessfully! ",fname); } } else { printf("\nError.\'%s\'dosenotexist.\n",fname); } } } 删除函数 voidDeleteF()/*DeleteFile*/ { charfname[MAXNAME],str[50],str1[50]; inti,k,j; intfpaddrno1; if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0){ printf("\nError.Pleaseconverttoufddirbeforedelete.\n"); wgetchar=1; } if(strcmp(strupr(dirname),strupr(username))! =0){ printf("\nError.Youcanonlymodifyfilemodeinyourselfdir.\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\'isinopenstatus.Closeitbeforedelete.\n",fname);wgetchar=1; } else { if(ufd[k]->ufdfile[i].fmode==3) { printf("\nError.\'%s\'isinprotectstatus.Closeitbeforedelete.\n",fname);wgetchar=1; } else { fpaddrno1=ufd[k]->ufdfile[i].fpaddr; fpaddrno[fpaddrno1]=0; for(j=i;j { ufd[k]->ufdfile[j]=ufd[k]->ufdfile[j+1]; } strcpy(str,"d: \\osfile\\file\\file"); itoa(fpaddrno1,str1,10); strcat(str,str1); strcat(str,".txt"); remove(str); fcount[k]--; printf("\n\'%s\'isdeletedsuccessfully.\n",fname); wgetchar=1; } } } else { printf("\nError.\'%s\'dosenotexist.\n",fname); wgetchar=1; } } } 写入函数 voidWriteF() { inti,k,m=0; intlength; charfname[MAXNAME]; charstr[255],str1[255]; if(strcmp(strupr(dirname),strupr(username))! =0) { printf("\nError.Pleaseconverttoufddirbeforewrite.\n"); wgetchar=1; return; } printf("\nCaution: Openfilefirst\n"); printf("OpenedFile(s)List: \n"); k=ExistD(dirname); for(i=0;i { if(ifopen[k][i].ifopen==1) { printf("%15s",ufd[k]->ufdfile[i].fname); m++; } if((m%4==0)&&(m! =0))printf("\n"); } printf("\n%dfilesopenned.\n",m); if(m==0)wgetchar=1; if(m! =0) { printf("\nPleaseinputFileName: "); gets(fname); ltrim(rtrim(fname)); i=ExistF(fname); if(i>=0) { if(ifopen[k][i].ifopen==1) { if((ifopen[k][i].openmode==1)||(ifopen[k][i].openmode==2)) { itoa(ufd[k]->ufdfile[i].fpaddr,str,10); strcpy(str1,"file"); strcat(str1,str); strcpy(str,"c: \\osfile\\file\\"); strcat(str,str1); strcat(str,".txt"); fp_file=fopen(str,"ab"); length=WriteF1(); ufd[k]->ufdfile[i].flength=ufd[k]->ufdfile[i].flength+length; printf("\n\n%dLength.\n",ufd[k]->ufdfile[i].flength); printf("\n\nYouhavewritefilesuccessfully! ! "); fclose(fp_file); wgetchar=0; } elseif(ifopen[k][i].openmode==0) { printf("\nError.\'%s\'hasbeenopenedwithREADONLYmode.Itisn\'twrite.\n",fname); wgetchar=1; } else { printf("\nError.\'%s\'hasbeenopenedwithPROTECTmode.Itisn\'twrite.\n",fname); wgetchar=1; } } else { printf("\nError.\'%s\'isinclosingstatus.Pleaseopenitbeforewrite\n",fname); wgetchar=1; } } else { printf("\nError.\'%s\'doesnotexist.\n",fname); wgetchar=1; } } } 【测试结果】 登录用户 创建文件: 打开文件: 关闭文件: 第一次读文件(查看原文件内容): 写文件: 再次读取文件(查看是否写入成功) 列出目录和帮助: 删除文件: 【设计总结】 【源程序】 #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;3-Protect;*/ 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; voidLoginF();/*LOGINFileSystem*/ voidDirF();/*DirFileSystem*/ voidCdF();/*ChangeDir*/ voidCreateF();/*CreateFile*/ voidDeleteF();/*DeleteFile*/ voidModifyFM();/*ModifyFileMode*/ voidOpenF();/*OpenFile*/ voidCloseF();/*CloseFile*/ voidReadF();/*ReadFile*/ voidWriteF();/*WriteFile*/ voidQuitF();/*QuitFileSystem*/ voidhelp(); char*rtrim(char*str);/*removethetrailingblanks.*/ char*ltrim(char*str);/*removetheheadingblanks.*/ voidInputPW(char*password);/*inputpassword,use'*'replace*/ voidSetPANo(intRorW);/*Setphysicaladdressnum*/ intExistD(char*dirname);/*WhetherDirNameExist,Exist-i,NotExist-0*/ intWriteF1();/*writefile*/ intExistF(char*filename);/*WhetherFileNameExist,Exist-i,NotExist-0*/ intFindPANo();/*findoutphysicaladdressnum*/ voidclrscr() { system("cls"); } voidmain() { inti,choice1; charchoice[50];/*choiceoperation: dir,create,delete,open,delete,modify,read,write*/ intchoiceend=1;/*whetherchoiceend*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 二级 文件系统 报告 源代码 天津 科技大学