您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 基于Linux的模拟文件系统的设计与实现
中北大学操作系统课程设计说明书学院、系:软件学院专业:软件工程学生姓名:赵巍学号:0921010414设计题目:基于Linux的模拟文件系统的设计与实现起迄日期:2011年12月22日-2012年1月7日指导教师:康珺2012年1月7日11需求分析所要实现的功能:(1)设计一个10个用户的文件系统。每个用户最多可以保存10个文件,一次运行用户可打开多个文件。(2)程序采用二级文件目录。(即设置主目录(MFD)和用户文件目录(UFD))。另外,可打开文件设置指针。(3)为了方便实现,对文件的读写作了简化。在执行读写命令时,只需改读写指针。并不进行实际的读写操作。(4)实现的基本功能主要包括:改变目录(CD),创建目录(MD),显示目录(DIR),删除目录(RD),打开全部文件(openall),打开单个文件(open),建立一个文件(create),删除一个文件(delete),写文件(write),读文件(read),改文件的保护码(change),退出(exit)等。考虑特殊情况如:各个命令对全路径和相对路径的支持、目录不存在时,给出错误信息、不能用cd进入文件、命令之中不能有空格(如exit,给出错误提示)、相对路径的解析、路径中的空格剔除、新建目录或文件时的问题、重名问题、目录或文件的名字长度限制、目录或文件的名字中包含不合法字符(注意空格)、删除目录或文件时的问题、删除不存在的文件或目录给出错误提示、删除目录时目录不为空(如果该目录为空,则可删除,否则给出是否做删除提示,删除操作将该目录下的全部文件和子目录都删除)、进入到某个目录下,却要删除本目录或上级目录、不能用delete删除目录、不能用RD删除文件等都要考虑在内。最终获得的成果就是:①在系统中用一个文件来模拟一个磁盘;②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。③实现这个文件系统。④能实际演示这个文件系统。基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。2总体设计2用户管理系统文件目录管理系统新建目录删除目录进入目录打开文件路径控制登陆退出目录内文件管理系统新建文件读文件写文件删除移动登陆退出2.1系统活动图注册登陆退出2.2头文件:#includestdio.h#includestdlib.h#includestring.h2.3结构体:typedefstructfile{charname[10];structfile*next;FILE*fp;}File;typedefstructcontent{charname[10];3File*fileHead;intf_num;structcontent*next;}Content;typedefstructuser{charname[10];charpsw[10];Content*conHead;intc_num;structuser*next;}User;2.4全局变量和函数:voidregiste()intlogin()voidMenuUser()voidFolderCreate()voidFolderDelete()voidFolderViewAllFiles()voidFolderIntoFolder()voidMenuFolder()voidFileCreate()voidFileRead()voidFileWrite()voidFileDelete()voidFileMove()3.详细设计用户管理系统:registe():用户注册login():用户登录目录管理系统:FolderCreate():新建目录FolderDelete():删除目录4FolderIntoFolder():进入目录FolderViewAllFiles():显示所有目录内的所有文件absolutePathFileController():通过绝对路径直接读文件文件管理系统:FileCreate():新建文件FileDelete():删除文件FileMove():跨目录移动文件FileRead():读文件FileWrite():写文件3.1用户管理系统:截图3-1相关核心代码://step0voidregiste(){if(user_num=10){printf(Has10users.Youhavenoaccesstoregister\n);return;}//allocatenewmemoryblockfornewuserUser*add,*last;add=(User*)malloc(sizeof(User));add-next=NULL;if(user_head==NULL)user_head=add;else{last=user_head;while(last-next!=NULL)last=last-next;last-next=add;5}user_num++;//fulfillthenewusercharname[10],psw[10];User*check;charbuffer[2];fgets(buffer,2,stdin);unr:printf(nowcreateanewuser:\nusername(9,onlyalphabetandnumbercanbeused):\n);scanf(%s,name);check=user_head;while(check!=add){if(strcmp(name,check-name)==0){printf(usernameexist.pleasere-input:\n);gotounr;}check=check-next;}strcpy(add-name,name);fgets(buffer,2,stdin);printf(password(10):\n);fgets(psw,10,stdin);strcpy(add-psw,psw);add-conHead=NULL;add-c_num=0;//successprintf(success\n);return;}//step0intlogin()6{if(user_head==NULL){printf(systemhasnouser\n);return0;}charbuffer[2];fgets(buffer,2,stdin);charname[10],psw[10];User*check;printf(press\#\ifyouwannaquit\n);unl:printf(username:\n);scanf(%s,name);if(name[0]=='#')return0;check=user_head;while(check!=NULL){if(!strcmp(check-name,name))break;elsecheck=check-next;}if(check==NULL){printf(nosuchuser..\npleasere-input:\n);gotounl;}//matchpasswordfgets(buffer,2,stdin);printf(password:\n);fgets(psw,11,stdin);if(strcmp(psw,check-psw)!=0){printf(wrongpassword\n);gotounl;}printf(\n\n*********welcomeback!%s*******\n\n,check-name);cur_user=check;7return1;}voidmain(intargc,char*argv[]){user_num=0;user_head=NULL;cur_user=NULL;intchoice;for(;;){printf(*******MAINMENU*********\n);printf(1.Newuser\n);printf(2.Login\n);printf(0.Exit\n);printf(*************************\n);printf(%duserexist\n,user_num);printf(InputYourChoice:);scanf(%d,&choice);switch(choice){case1:registe();continue;case2:if(login())MenuUser();continue;case0:printf(Thanksforusing\n);exit(0);default:printf(wronginput!\n);}}}3.2目录管理系统:8截图3-2相关核心代码://step0-1voidMenuUser(){voidFolderCreate();voidFolderDelete();voidFolderViewAllFiles();voidFolderIntoFolder();voidabsolutePathFileController();User*current;Content*goThrough;current=cur_user;goThrough=current-conHead;for(;;){printf(*********%s'sContent************\n,cur_user-name);printf(1.createafolder\n);printf(2.getintoafolder\n);printf(3.deleteafolder\n);printf(4.viewallfiles\n);printf(5.readafiledirectlybyabsolutepath\n);printf(6.logout\n);printf(0.shutdownFILE_SYSTEM\n);printf(viewallyourfoldersbelow:%dfolderstotal\n,current-c_num);if(current-conHead==NULL)9printf(|\nnofolder.\n);else{goThrough=current-conHead;while(goThrough!=NULL){printf(|\n%s\n,goThrough-name);goThrough=goThrough-next;}}printf(*******************************************);printf(\ninputyourchoice:\n);intchoice;scanf(%d,&choice);switch(choice){case1:FolderCreate();continue;case2:FolderIntoFolder();continue;case3:FolderDelete();continue;case4:FolderViewAllFiles();continue;case5:absolutePathFileController();continue;case6:printf(\nThanksforusing\n\n);return;case0:printf(\nThanksforusing\n);cur_user=NULL;cur_con=NULL;exit(0);default:printf(wronginput!\n);}}}//step1voidFolderCreate(){User*user;user=cur_user;//allocatenewmemoryblockfornewfolderContent*add,*last;add=(Content*)malloc(sizeof(Content));add-next=NULL;if(user-conHead==NULL)user-conHead=ad
本文标题:基于Linux的模拟文件系统的设计与实现
链接地址:https://www.777doc.com/doc-2534544 .html