操作系统的课程设计Linux二级文件资料系统设计_第1页
操作系统的课程设计Linux二级文件资料系统设计_第2页
操作系统的课程设计Linux二级文件资料系统设计_第3页
操作系统的课程设计Linux二级文件资料系统设计_第4页
操作系统的课程设计Linux二级文件资料系统设计_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实用标准文案实用标准文案精彩文档精彩文档操作系统课程设计报告专业:软件工程学号:姓名:马提交日期:2017/1/10【设计目的】1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现2、结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统3、通过对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力【设计内容】为Linux系统设计一个简单的二级文件系统。要求做到以下几点:.可以实现下列几条命令:login 用户登录dir 列目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件cd 进出目录.列目录时要列出文件名,物理地址,保护码和文件长度.源文件可以进行读写保护【实验环境】C++DevCpp【设计思路】本文件系统采用两级目录, 其中第一级对应于用户账号, 第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享, 文件系统安全以及管道文件与设备文件等特殊内容。首先应确定文件系统的数据结构: 主目录、子目录及活动文件等。 主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2 …并以编号作为物理地址,在目录中进行登记。结构体: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;主要的函数说明:voidLoginF();/*LOGINFileSystem用户登录*/voidDirF();/*DirFileSystem列目录*/voidCdF();/*ChangeDir改变目录*/voidCreateF();/*CreateFile创建文件*/voidDeleteF();/*DeleteFile删除文件*/voidModifyFM();/*ModifyFileMode 修改*/voidOpenF(); /*OpenFile 打开文件*/voidCloseF(); /*CloseFile 关闭文件*/voidReadF();/*ReadFile读文件*/voidWriteF();/*WriteFile写文件*/voidQuitF();/*QuitFileSystem离开文件系统*/voidhelp();其他重要函数:voidclrscr()//清屏intExistD(char*dirname)"WhetherDirNameExist,Exist-i,NotExist-0*/intExistF(char*filename)"WhetherFileNameExist,Exist-i,NotExist-0*/intFindPANo()/*findoutphysicaladdressnum*/voidSetPANo(intRorW)/*Setphysicaladdressnum,0-read,1-write*/voidInputPW(char*password)/*inputpassword,use'*'replace*/char*ltrim(char*str)/*removetheheadingblanks. 去除左空白*/char*rtrim(char*str)/*removethetrailingblanks. 去除右空白*/intWriteF1()/*writefile 相当于置换文件*/实用标准文案实用标准文案程序流程说明:整体流程:开始Login(Name/Pw/Cpw),、/1,、,、修创打写读删关更改退建精;彩文出开文文除闭改文清出文文件件文文目件屏系件件件件录属统性实用标准文案实用标准文案精彩文档精彩文档各部分功能流程:Open:开始只能修改用户目录下的文件!接收删除文件名获取文件YN-获取物理块号文件向前移动删除文件,文件数减一实用标准文案实用标准文案实用标准文案实用标准文案精彩文档精彩文档Close:开始罗列已经打开的文件获取文件名获取物理地址关闭文件文件成功关闭【源程序清单】该文件已被关闭Open:voidOpenF()/*OpenFile*/{printf("\n\nC:\\%s>",strupr(dirname));intfcoun,i;charfname[MAXNAME],fmode[25];intfmod;printf("\nPleaseinputFileName:");gets(fname);ltrim(rtrim(fname));if(ExistF(fname)<0){//显示当前路径//定义两个整形变量//定义两个字符串变量//文件模式//接收打开文件的文件名//去除左右空白//判断文件是否存在//不存在printf("\nError.文件名\'%s\'不存在\n",fname);wgetchar=1;}else{i=ExistD(username);for(inta=0;a<fcount[i];a++)//存在//获取用户物理信息//遍历用户文件{if(strcmp(fname,ufd[i]->ufdfile[a].fname)==0){fcoun=a;break;//找到文件ifopen[i][fcoun].ifopen=1;

//将文件状态置为打开状态printf("PleaseinputOpenMode(0-ReadOnly,1-WriteOnly,2-ReadandWrite,3-Protect):");//获取模式//将字符串转换为整型//打开文件模式//获取模式//将字符串转换为整型gets(fmode);fmod=atoi(fmode);ifopen[i][fcoun].openmode=fmod;

//将文件的模式置为OpenModeprintf("\nOpenSuccessed");wgetchar=1;Delete://显示路径//显示路径//定义三个字符串变量//记录文件物理地址块号printf("\n\nC:\\%s>",strupr(dirname));charfname[MAXNAME],str[50],str1[50];inti,k,j;intfpaddrno1;

if(strcmp(strupr(ltrim(rtrim(dirname))),"")==0){ //判断主目录是否为空printf("\nError. 请确认您要删除的是否在用户目录下! \n");wgetchar=1;}if(strcmp(strupr(dirname),strupr(username))!=0){ 〃判断用户是否在用户目录下printf("\nError.wgetchar=1;}else{printf("\nPleaseinputFileName:");printf("\nError.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\'您只能删除修改自己用户目录下的文件哦!\n");//接收删除的文件名//去除文件名的左右空白//用户文件位置//获取用户所在存储位置//文件状态处于打开状态,不许删除处于打开状态!请先关闭哟!\n",fname);wgetchar=1;}else{if(ufd[k]->ufdfile[i].fmode==3){ //保护文件,不可删除printf("\nError.\'%s\' 处于被保护状态!请先关闭哟!\n",fname);

wgetchar=1;//获取文件的物理地//获取文件的物理地fpaddrno1=ufd[k]->ufdfile[i].fpaddr;址块号fpaddrno[fpaddrno1]=0;

//回收物理地址块号for(j=i;j<fcount[k];j++)

//将文件都向前移动ufd[k]->ufdfile[j]=ufd[k]->ufdfile[strcpy(str,"c:\\osfile\\file\\");itoa(fpaddrno1,strl,10);strcat(str,strl);strcat(str,".txt");remove(str);fcount[k--];j+1];//将j+1位置为j//将整数转化为字符〃连接//删除物理文件//文件个数减一printf("\n\'%s\'isdeletedsuccessfully.\n",fname);wgetchar=1;}else{//文件不存在printf("\nError.\'%s\'文件不存在!//文件不存在wgetchar=1;}}}Write:voidWriteF()/*WriteFile*/{printf("\n\nC:\\%s>",strupr(dirname));inti,k,m=0;intlength;charfname[MAXNAME];charstr[255],str1[255];if(strcmp(strupr(dirname),户目录下strupr(username))!=0)//显示用户路径//定义整形变量//定义长度整形变量//定义文件名字符串//定义两个字符串变量{ //判断用户是否在用printf("\nError!请确认您要写的在用户目录下!\n");wgetchar=1;return;}printf("\n 请先打开文件! \n");printf("OpenedFile(s)List:\n");k=ExistD(dirname);//获取用户文件信息//遍历用户下的文件////遍历用户下的文件//文件处于打开状态//每创建4个文件换//创建文件//接收文件名〃去除左右空白//获取文件物理地址//文件存在//文件处于打开状态||ifopen[k][i].openmode==2) {for(i=0;i<fcount[k];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%d 文件已经打开啦! \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是只写或读写//文件权限itoa(ufd[k]->ufdfile[i].fpaddr,str,10); //获取文件路径strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:\\osfile\\file\\");strcat(str,strl);strcat(str,".txt"); //文件路径charstr2[3];intchoice=3;strcpy(str2,"ab");printf("Youcanchoise[0-CoveredW][1-AdditonalW]:");覆盖//选择追加还是覆盖scanf("%d",&choice);if(choice==0) 〃。-覆盖strcpy(str2,"wb");fp_file=fopen(str,str2); //打开文件length=WriteF1();ufd[k]->ufdfile[i].flength=ufd[k]->ufdfile[i].flength+length;//修改文件长度if(choice==0)

ufd[k]->ufdfile[i].flength=length;printf("\n\nYouhavewritefilesuccessfully!!!");fclose(fp_file); //关闭文件wgetchar=0;}elseif(ifopen[k][i].openmode==0){//文件处于只读状态,不允许写fname);printf("\nError.\'%s\'文件以只读状态打开,不允许写!\n",wgetchar=1;不允许写fname);}else{printf("\nError.\'%s\' 文件处于关闭状态,请先打开! \n",fname);wgetchar=1;}}}else{printf("\nError.\'%s\' 文件不存在! \n",fname);〃文件不存在wgetchar=1;}Close:voidCloseF()/*CloseFile*/{printf("\n\nC:\\%s>",strupr(dirname)); //显示路径charfname[MAXNAME]; //定义字符串变量inti,k,n=0;if(strcmp(strupr(dirname),strupr(username))!=0) //关闭用户文件需在用户目录下{printf("\nError!请确认您要关闭的是在用户目录下! \n");}else{printf("\n\nOpenedFile(s)List:\n"); //罗列已处于打开的文件k=ExistD(dirname);for(i=0;i<fcount[k];i++){if(ifopen[k][i].ifopen==1) //文件处于开启状态if((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2))//只读或者读写状态{printf("%15s",ufd[k]->ufdfile[i].fname);

n++;}if((n%4==0)&&(n!=0))printf("\n");}printf("\n%d 文件已被打开! \n",n);if(n==0)wgetchar=1;//接收关闭文件的文件名//接收关闭文件的文件名//除去首尾空格//获取文件物理地址//获取用户文件信息//文件处于关闭状态gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){k=ExistD(username);if(ifopen[k][i].ifopen==0){printf("\nError!\'%s\'文件已经被关闭! \n",fname);}else{ 〃将文件关闭ifopen[k][i].ifopen=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论