您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 文件管理课程设计报告
操作系统课程设计报告姓名:xxx______学号:xxxxxxxxxxxx__专业年级:软件2班指导教师:__xx_2016年3月1日1概述目的:本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。意义:本系统是基于linux平台运行在终端上的虚拟二级文件管理系统。模拟真正的文件管理系统,并采用用户登录机制对文件和文件夹进行创建,修改,删除的操作。对于文件夹而言,可以进行创建删除的操作;对于文件而言,可以创建,修改,删除。删除文件夹时,同时删除相应文件夹下的文件。采用用户登录使得用户管理文件更方便,并形成了二级的文件管理模式。主要任务:为DOS系统设计一个简单的二级文件系统.要求做到以下几点:①可以实现下列命令:login用户登录dir列文件目录create创建文件delete删除文件open打开文件close关闭文件read读文件write写文件②列目录时要列出文件名、物理地址、保护码和文件长度.③源文件可以进行读写保护2系统设计(1)设计思路程序中要求每个用户在登陆后才可对其拥有的文件进行操作,用户对于其他用户的文件无操作权.文件操作包括浏览、创建、删除、打开、关闭、阅读、写入、修改模式.其他操作包括新建用户、帮助、用户登入、用户登出、退出系统.在程序文件夹下有个名为“file”的系统根目录,此目录下包括:一个名为“mfd”的文件,记录所有注册过的帐号及密码;用户文件,以用户名作为文件名,内容为其拥有的文件名及属性;一个名为“keiji”的文件夹.“keiji”文件夹中包括:“file.p”指针文件,记录所有已用的物理地址;一些以物理地址为名的文件,内容为文件内容.(2)数据结构file结构体系统文件.数据结构:fpaddrint,文件的物理地址、flengthint,文件长度、fmodeint,文件模式0.只读;1.可写;2.可读写;3.保护、fname[]char,文件名;filemode结构体文件状态数据结构:isopenint,文件当前状态,0.关闭;1.打开、modeint,文件模式0.只读;1.可写;2.可读写。(3)初始化user结构体用户信息数据结构:uname[]char,用户名、upassword[]char,用户密码;userfile结构体用户文件数据结构:uname[]char,用户名、ufile[]file,用户拥有的文件数组3系统实现#includestdio.h#includestdlib.h#includeconio.h#includetime.h#includestring.h#defineMaxUser100//定义最大mdf目录文件#defineMaxDisk512*1024//模拟最大磁盘空间512k#definecommandAmount12//对文件操作指令数chardisk[MaxDisk];//模拟512k磁盘空间typedefstructdistTable//磁盘块结构体{intmaxlength;intstart;intuseFlag;distTable*next;}diskNode;diskNode*diskHead;structfileTable//文件块结构体{charfileName[10];intstrat;//文件在磁盘存储空间的起始地址intlength;//文件内容长度intmaxlength;//文件的最大长度charfileKind[3];//文件的属性——读写方式structtm*timeinfo;boolopenFlag;//判断是否有进程打开了文件//fileTable*next;};//两级目录结构体typedefstructuser_file_directory//用户文件目录文件UFD{//charfileName[10];fileTable*file;user_file_directory*next;}UFD;//UFD*headFile;typedefstructmaster_file_directory//主文件目录MFD{charuserName[10];charpassword[10];UFD*user;}MFD;MFDuserTable[MaxUser];intused=0;//定义MFD目录中用已有的用户数//文件管理voidfileCreate(charfileName[],intlength,charfileKind[]);//创建文件voidfileWrite(charfileName[]);//写文件voidfileCat(charfileName[]);//读文件voidfileRen(charfileName[],charrename[]);//重命名文件voidfileFine(charfileName[]);//查询文件voidfileDir(charUserName[]);//显示某一用户的所有文件voidfileClose(charfileName[]);//关闭以打开的文件voidfileDel(charfileName[]);//删除文件voidchmod(charfileName[],charkind[]);//修改文件的读写方式intrequestDist(int&startPostion,intmaxLength);//磁盘分配查询voidinitDisk();//初始化磁盘voidfreeDisk(intstartPostion);//磁盘空间释放voiddiskShow();//显示磁盘使用情况//用户管理voiduserCreate();intlogin();intuserID=-1;//用户登录的ID号,值为-1时表示没有用户登录intmain(){charorder[commandAmount][10];strcpy(order[0],create);strcpy(order[1],rm);strcpy(order[2],cat);strcpy(order[3],write);strcpy(order[4],fine);strcpy(order[5],chmod);strcpy(order[6],ren);strcpy(order[7],dir);strcpy(order[8],close);strcpy(order[9],return);strcpy(order[10],exit);strcpy(order[11],df);charcommand[50],command_str1[10],command_str2[10],command_str3[5],command_str4[3];inti,k,j;intlength;initDisk();//初始化磁盘for(i=0;iMaxUser;i++)//初始化用户UFD目录文件的头指针{userTable[i].user=(UFD*)malloc(sizeof(UFD));userTable[i].user-next=NULL;}while(1){printf(********************************************\n);printf(1、Creatuser\n);printf(2、login\n);printf(********************************************\n);printf(Pleasechoocethefunctionkey:);intchoice;scanf(%d,&choice);if(choice==1)userCreate();elseif(choice==2)userID=login();elseprintf(您的输入错误!请重新选择\n);while(userID!=-1){fflush(stdin);printf(***********************************\n);printf(create-创建格式:createa11000rw,将创建名为a1,长度为1000字节可读可写的文件\n);printf(rm-删除格式:rma1,将删除名为a1的文件\n);printf(cat-查看文件内容格式:cata1,显示a1的内容\n);printf(write-写入格式:writea1\n);printf(fine-查询格式:finea1,将显示文件a1的属性\n);printf(chmod-修改格式:chmoda1r,将文件al的权限改为只读方式\n);printf(ren-重命名格式:rena1b1,将a1改名为b1\n);printf(dir-显示文件格式:diraaa,将显示aaa用户的所有文件\n);printf(df-显示磁盘空间使用情况格式:df\n);printf(close-关闭文件格式:closea1,将关闭文件a1\n);printf(return-退出用户,返回登录界面\n);printf(exit-退出程序\n);printf(***********************************\n);printf(pleaseimputyourcommand:);gets(command);intselect;for(i=0;command[i]!=''&&command[i]!='\0';i++)//command_str1字符串存储命令的操作类型command_str1[i]=command[i];k=i;command_str1[k]='\0';for(i=0;icommandAmount;i++){if(!strcmp(command_str1,order[i])){select=i;break;}}if(i==commandAmount){printf(您输入的命令有误,请重新输入\n);continue;}for(i=k+1,k=0;command[i]!=''&&command[i]!='\0';i++,k++)//commmand_str2字符串存储文件名或用户名command_str2[k]=command[i];command_str2[k]='\0';k=i;switch(select){case0:for(i=k+1,k=0;command[i]!='';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';k=i;j=1;length=0;//初始化文件长度for(i=strlen(command_str3)-1;i=0;i--)//把字符串转换为十进制{length+=(command_str3[i]-48)*j;j*=10;}for(i=k+1,k=0;command[i]!=''&&command[i]!='\0';i++,k++)command_str4[k]=command[i];command_str4[k]='\0';fileCreate(command_str2,length,command_str4);break;case1:fileDel(command_str2);break;case2:fileCat(command_str2);break;case3:fileWrite(command_str2);break;case4:fileFine(command_str2);break;case5:for(i=k+1,k=0;command[i]!=''&&command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';chmod(command_str2,command_str3);break;case6:for(i=k+1,k=0;command[i]!='\0';i++,k++)command_str3[k]=command[
本文标题:文件管理课程设计报告
链接地址:https://www.777doc.com/doc-2177434 .html