您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 操作系统课程设计-文件系统
模拟一个简单二级文件管理系统设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。设计内容:模拟一个简单二级文件管理系统一、实验内容描述1实验目标本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现.2实验要求为DOS系统设计一个简单的二级文件系统.要求做到以下几点:①可以实现下列命令:login用户登录dir列文件目录create创建文件delete删除文件open打开文件close关闭文件read读文件write写文件②列目录时要列出文件名、物理地址、保护码和文件长度.③源文件可以进行读写保护.二、程序主要内容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,用户拥有的文件数组.代码:#includestdio.h#includestdlib.h#includeconio.h#includetime.h#includestring.h#defineMaxUser100//定义最大MDF主目录文件#defineMaxDisk512*1024//模拟最大磁盘空间#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,将文件a1的权限改为只读方式\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[i];command_str3[k]='\0';fileRen(command_str2,command_str3);break;case7:fileDir(command_str2);break;case8:fil
本文标题:操作系统课程设计-文件系统
链接地址:https://www.777doc.com/doc-3402660 .html