欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    一个简单的文件系统的详细设计操作系统课程设计.doc

    • 资源ID:2710734       资源大小:390.50KB        全文页数:43页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    一个简单的文件系统的详细设计操作系统课程设计.doc

    计算机系综合性实验实 验 报 告 课程名称 操作系统实验报告 一个简单的文件系统的详细设计一个简单的文件系统的详细设计一、实验目的(1)阅读并调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。(2)了解设计一个n个用户的文件系统,每个用户可以保存M个文件。用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令。二、实验要求1、根据流程图阅读所给文件系统源程序,并对源程序加以注释(注释量达70%以上)。2、修改、完善该系统,指出程序的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. 主要数据结构struct UFD/用户文件模块char filename32; /文件名int safecode; /文件保护码long length; /文件长度*curfile = NULL;这个是用户文件模块数据结构,结构体的名字是:UFD,在结构体里面定义了三个成员,filename,safecode,length,分别用于存储用户文件的名字,文件保护码,文件的长度, *curfile = NULL;,这是一个结构体类型的指针,开始初始化为NULL.struct MFD/主文件模块char username32; /存放用户名bool filepoint; /用户目录下的文件指针,false表示目录为空,true为该用户目录中有文件*curuser = NULL,*elseuser=NULL;这个是主文件模块的数据结构,有两个成员,username,filepoint,分别用于存放用户名,用户目录下面的文件指针. *curuser = NULL,*elseuser=NULL;这两个是主文件的结构体变量,用于访问结构体里面的数据成员4. 主要功能模块1. int LoginDisplay() /登陆选项操作函数2. bool Login(int SELETE)/用户登陆,注册函数3. void DisplayUFD() /打印用户信息,包括用户的各个文件4. void ByeFile(bool BOOL)/注销函数,调用次函数用户可以退出系统5. bool ClearUserFile()/用户要将自己的注册目录从系统彻底删除6. void ClearUserMes()/删除用户全部信息7. void DeleteUser()/删除用户注册目录的操作8. void CreatFile()/在当前用户目录下创建文件9. void DeleteFile()/删除当前目录下一个文件的操作10. bool QueryModElse(bool BOOL,bool &flag)/查询其它用户目录下文件的文件11. bool QueryMod(bool BOOL)/查询权限12. bool WriteRight(int len,bool BOOL) /查看是否已经正确地写入到该文件信息中,是则返回真值13. void WriteLengthToFile(int Len,bool BOOL)/将文件长度写入文件管理模块中14. void WriteFile()/向文件写入信息的操作15. void ReadFile()/读文件函数16. void ChangeMod()/修改某文件的执行权限17. void Execute(int i,int len,int cmdset)/执行命令函数18. void Command()/读取用户输入的命令,并将其转换成系统能识别的命令5小组成员及分工 负责人:姓名模 块黄新潮组长分配任务,总结实验心得,分析流程图,给组员讲解王强对源程序加以注释、修改张蒙对源程序读取,运行,截图,完善四、文件系统功能模块详细设计流程图1. int LoginDisplay() /登陆选项操作函数YNScanf SELETE_1Return SELETE_10<=SELETE_1<=2?BeginEnd图1 LoginDisplay 2. bool Login(int SELETE)/用户登陆,注册函数OtherNYNYNY21SELETESearch MFD(图2.1)Ture?Return TureReturn FalseScanf nameBeginLOGIN.exe?Search MFD(图2.1)Ture?Fwrite nameCreat name.exe End图2 LoginScanf nameNYNY此模块重复调用,因此单独列出,到文件尾时仍未找到同名文件/用户名返回False,反之返回True搜索xFD图2.1 Search xFDTemp=Malloc(xFD)EOF?Return TureReturn False BeginFread(temp,xFD,1,file/login.exe)Temp=Name Buffer End3. void DisplayUFD() /打印用户信息,包括用户的各个文件YNNNYYBeginFilepointUsername.exeEOFTemp=Malloc(UFD)Fread(temp,UFD,1,username.exe)Cout TempCout No FileEnd图3 DisplayUFD4. void ByeFile(bool BOOL)/注销函数,调用次函数用户可以退出系统YYNNUpdate(True) MFD(图4.1)Begin LOGIN.exeoutfilelocate.exeRemove LOGIN.exeoutfilelocate.exe->LOGIN.exeEndCout error图4 ByeFileNYYNYNBegin 此模块重复调用,因此单独列出,更新xFDUpdate为True只更新,反之会进行删除操作Temp=Malloc(xFD)EOFFread(Temp,xFD,1,file/login.exe)Temp=username BufferUpdateFwrite(Temp,xFD,1, outfilelocate.exe) End图4.1 Update xFD5. bool ClearUserFile()/用户要将自己的注册目录从系统彻底删除NYYNBeginFile=username.exeFile EOFTemp=Malloc(UFD)Fread(Temp,UFD,1,file)Remove Temp->fileReturn TrueEnd图5 ClearUserFile6. void ClearUserMes()/删除用户全部信息Name=username.exeRemove NameUpdate(False) MFD(图4.1)End图6 ClearUserMesBegin7. int DeleteUser()/删除用户注册目录的操作OtherYY|yEnd图7 DeleteUserBeginchScanf chRR=ClearUserFile(图5)ClearUserMes(图6)Return 18. void CreatFile()/在当前用户目录下创建文件NOtherNY|yYYBeginBufferScanf ChFread(NewFile,UFD,1,username.exe)Server&Set BufferCout errorEnd图8 CreatFileCan WriteChScanf BufferCout TureNewFile=Malloc(UFD)9. void DeleteFile()/删除当前目录下一个文件的操作OtherNY|yNYYBeginTure?ChScanf ChRemove BufferEnd图9 DeleteFileSearch UFD(图2.1)Name.exeUpdate(False) UFD(图4.1)10. bool QueryModElse(bool BOOL,bool &flag)/查询其它用户目录下文件的文件NNNNYYY31|33 YYNNYBeginTemp.File=BufferCout errorFread(Temp,UFD,1,user.exe)Return TrueEnd图10 QueryModElseEOF?Temp?Return FalseTemp=Malloc(UFD)BOOL32|3311. bool QueryMod(bool BOOL)/查询权限NNYYNYNNNYYBeginUsername.exeEOFFread(temp,UFD,1,username.exe)Return TrueElse=Malloc(MFD)End图11 QueryModbuffertemp=Malloc(UFD)EOFFread(Else,MFD,1,Login.exe)Username=ElseTureQueryModElse(图10)Return False12. bool WriteRight(int len,bool BOOL) /查看是否已经正确地写入到该文件信息中,是则返回真值NYNNYYNYNNYYBeginUsername.exeEOFFread(temp,UFD,1,username.exe)Length=lenReturn FalseEnd图12 WriteRighttemp=Malloc(UFD)BufferFwrite(temp,UFD,1, outfilelocate.exe)outfilelocate.exeLength+lenEOFBufferFread(temp,UFD,1,username.exe) BOOLRemove username.exeoutfilelocate.exe ->username.exeReturn Ture13. void WriteLengthToFile(int Len,bool BOOL)/将文件长度写入文件管理模块中NYYYNNBegin LOGIN.exeFread(Else,MFD,1,LOGIN.exe)EndCout error图13 WriteLengthToFileElse=Malloc(MFD)EOFWriteRight(图12)True?14. void WriteFile()/向文件写入信息的操作NN2OtherYY21YYNNBegin BufferEndGet char图14 WriteFileScanf ChmodChmodQueryMod(true)(图11)True?Char!=#Fput(char,buffer)Get charChar!=#Fput(char,buffer)WriteLengthToFile (图11)Cout error15. void ReadFile()/读文件函数NYYYNNBegin True?Putchar(ch)EndCout error图15 ReadFileFgetchar(buffer)BufferQueryMod(False)(图12) EOF?16. void ChangeMod()/修改某文件的执行权限OtherYNY|yBegin True?Scanf ModEndCout error图16 ChangeModPrintf Mod TestChSearch UFD(图2.1)Scanf chUpdate UFD(图4.1)Remove username.exeoutfilelocate.exe->username.exe17. int Execute(int i,int len,int cmdset)/执行命令函数987654231NYNYBegin Cmdi!=0Bufferi=CmdiEndCout error图17 ExecuteListAllFileBuffer?ChangeMod(图16)ByeFile(图4)OpenFileReturn TempcmdsetDeleteUser(图7)CreatFile (图8)DeleteFile (图9)ReadFile (图15)WriteFile (图14)18. void Command()/读取用户输入的命令,并将其转换成系统能识别的命令YNYNYNYBegin 1Scanf cmdEnd图18 CommandBufferi=cmdi>| |len-1Cmdset=0|mid二分查找命令编号CmdsetEndIt?Execute(图17)五、实验运行结果/* * 文件名: Simple_file_system.c* 功 能: 简单文件管理系统模拟程序 */#include<iostream.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include "conio.h"#include<dos.h>#define NULL 0#define keynum 10#define getspace(type) (type*)malloc(sizeof(type) /宏定义 申请内存char cmd64; /存放用户输入命令char buffer36;/char user32;/存放当前登陆的用户名typedef char ALFA12;ALFA KWORDkeynum;/-struct UFD/用户文件管理模块char filename32; /文件名int safecode; /文件保护码long length; /文件长度*curfile = NULL;/-struct MFD/用户登陆信息管理模块char username32; /用户名bool filepoint; /用户目录下的文件指针,false表示目录为空,true为该用户目录中有文件*curuser = NULL,*elseuser=NULL;typedef UFD UFD; /重命名typedef MFD MFD;void main();/-void KeyWord()/初始化命令关键字strcpy(KWORD 1,"bye"); /用户注销命令strcpy(KWORD 2,"chmod"); /改变文件的执行权限strcpy(KWORD 3,"close"); /删除用户注册信息strcpy(KWORD 4,"create"); / 在当前目录下创建一个文件strcpy(KWORD 5,"delete"); /删除当前用户目录下的一个文件strcpy(KWORD 6,"list"); /显示当前注册目录下的所有文件信息strcpy(KWORD 7,"open"); /打开文件strcpy(KWORD 8,"read"); /读文件信息strcpy(KWORD 9,"write"); /向文件写入新的信息/-int LoginDisplay() /登陆选项操作函数int SELETE_1 = 0; /定义整型数存放选项do /循环控制 cout<<" *请选择操作*n1、用户登陆 2、用户注册 0、退出"<<endl; /显示登陆选项界面 cin>>SELETE_1; /输入要选择的命令while(SELETE_1<0 | SELETE_1>2); /选项判断system("cls"); /清屏return SELETE_1; /返回选项数/-bool Login(int SELETE)/用户登陆,注册函数FILE *fp,*fp1,*fp2; /定义文件char name12; /定义数组存放登录名switch(SELETE) /switch选择case 1:/用户登陆if(fp = fopen("LOGIN.exe","rb") = NULL)/打开用户注册目录管理文件cout<<"n错误:不能打开登陆文件。"<<endl; /显示错误getch(); /读取结束符system("cls"); /清屏return false; /返回curuser = getspace(MFD); /用户名申请空间cout<<"n*登陆*n用户名:" /显示cin>>name; /输入用户登陆名while(!feof(fp) /检查该用户是否合法fread(curuser,sizeof(MFD),1,fp); /文件读取if(strcmp(curuser->username,name)=0) /比较输入用户名是否与存在用户名相同break;if(feof(fp) /如果没有找到跟当前登陆用户名相同的管理信息,执行下列代码cout<<"n错误:该用户不存在。"<<endl; /显示“错误:该用户不存在” fclose(fp); /关闭文件 return false; /返回elsefclose(fp); /关闭文件return true; /返回break; /跳出case 2: /新用户注册if(fp=fopen("LOGIN.exe","ab")=NULL)/如果登陆信息管理文件不存在fp=fopen("LOGIN.exe","wb+"); /创建该信息管理文件char name12;curuser = getspace(MFD); /用户申请空间while(1)cout<<"n *新用户注册*"<<endl;cout<<"用户名:" cin>>name; /输入用户注册名fp1 = fopen("LOGIN.exe","rb"); /打开登陆文件,只允许读数据while(!feof(fp1)/查看该用户名是否被别的用户占用fread(curuser,sizeof(MFD),1,fp1); /文件读取if(strcmp(curuser->username,name) = 0)cout<<"n该用户已经存在,请重新输入!"<<endl; /该名称已经被使用getch(); /读取结束符break; /跳出if(feof(fp1)/该名称没有被别的用户占用strcpy(curuser->username,name); /拷贝输入的用户名到用户名结构体 curuser->filepoint = NULL; /文件指针置空 fwrite(curuser,sizeof(MFD),1,fp); /用户信息写入文件strcpy(user,curuser->username);/生成用户文件管理模块strcat(user,".exe"); /用于管理用户目录下的各个文件fp2=fopen(user,"wb+"); /打开文件,允许读和写fclose(fp2); /关闭fp2 cout<<"n注册成功!"<<endl; /提示注册成功 LoginDisplay();fclose(fp1); /关闭fp1 fclose(fp); /关闭fpbreak;fp = fopen("LOGIN.exe","rb"); /显示当前注册用户的名称while(1)fread(curuser,sizeof(MFD),1,fp); /文件读取if(feof(fp) /检查是否最后用户break;cout<<curuser->username<<endl; / 显示用户名getch(); /读取结束符fclose(fp); /关闭文件return true; /返回break;default:return false; /返回break; /返回到上一层/-void DisplayUFD()/打印用户信息,包括用户的各个文件 /名称、长度和操作权限的设置信息if(curuser->filepoint = false)/当前用户目录下没有任何文件存在cout<<"n用户 "<<curuser->username<<" 文件夹是空的"<<endl;else/存在文件,将所有文件信息打印在终端FILE *fp; /定义文件char filename12; /定义文件名strcpy(filename,curuser->username); /拷贝用户名到定义strcat(filename,".exe"); /扩展名.exeif(fp=fopen(filename,"rb")=NULL)/打开用户文件信息管理模块cout<<"n无法打开用户:"<<curuser->username<<" 的文件!"<<endl; /显示getch(); /读取结束符return;else /读入并将用户全部文件信息打印在终端cout<<"用户:"<<curuser->username<<"目录下的文件:"<<endl;UFD *ufd; /申请文件模块int i=0;ufd = getspace(UFD); /申请存放用户文件模块的空间while(1)fread(ufd,sizeof(UFD),1,fp); /文件读取,把文件信息读到用户中if(feof(fp) /全部输出break;else /打印信息cout<<ufd->filename<<"t"<<ufd->length<<"t"<<ufd->safecode<<endl; /输出文件信息fclose(fp); /关闭文件 /-void ByeFile(bool BOOL)/注销函数,调用次函数用户可以退出系统FILE *infile,*outfile; /定义文件char out50; /定义数组out50strcpy(out,"outfilelocate.exe"); /拷贝信息到数组if(infile=fopen("LOGIN.exe","rb")=NULL)/检查是否保存cout<<"n保存错误。"/fclose(infile);return;elseif(outfile=fopen(out,"wb+")=NULL)/申请一个缓冲区管理模块/存放用户更新后的全部信息cout<<"n保存错误。"/ fclose(outfile);fclo

    注意事项

    本文(一个简单的文件系统的详细设计操作系统课程设计.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开