您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统课程设计磁盘文件操作报告
0操作系统课程设计报告理论成绩实践成绩总成绩院系:信息管理学院专业:软件工程班级:组员:教师:时间:2012.111目录一、课程设计的题目和目的.......................................................2二、课程设计的实现的具体功能................................................2三、文件系统的基本原理和概念................................................2四、课程设计的分工...................................................................3五、总体设计...............................................................................4六、详细设计...............................................................................6七、程序测试与测试结果.........................................................18八、简要的使用说明.................................................................24九、设计总结.............................................................................24十、程序设计源代码.................................................................252一、课程设计的题目和目的设计一个简单的文件系统,要求实现:(1)支持多级目录结构;(2)实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件、关闭文件、改变文件属性。本设计的目的是通过设计和调试一个简单的文件系统,主要是模拟文件操作命令的执行,来模拟文件管理,使我们对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。二、课程设计的实现的具体功能1.支持多级目录结构,支持文件的绝对路径;2.文件的逻辑结构采用流式结构,物理结构采用链接结构中的显示链接方式;3.采用文件分配表;4.实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件、关闭文件、改变文件属性。三、文件系统的基本原理和概念1、文件系统设计需要解决的两个问题:一是如何定义对用户的接口。如定义文件机器属性、文件所允许的操作、组织文件的目录结构;二是创建数据结构和算法来将逻辑文件系统映射到物理外存设备上。文件系统存在于辅助存储器——磁盘。2、文件的实现,需要建立磁盘结构,这个涉及到如何启动所存储的操作系统、磁盘总的块数、空闲块的数目和位置、目录结构以及各个具体文件等。3、目录的实现:为了实现用户对文件的按名存取,系统必须首先利用用户提供的文件名,对文件目录进行查询,找出该文件的文件控制块FCB,然后根据找到的FCB中所记录的文件物理地址,并根据文件物理组织方式找出文件的磁盘号,进而换算出文件在磁盘上的物理位置,然后启动磁盘驱动程序,将所需文件读入内存。4、基于连接分配的磁盘空间:每个文件是磁盘块的链表:磁盘块可以分散在磁盘的任何地方,目录包括文件第一块的指针和最后一块指针。本次设计采用的是文件分配表(FAT),它是连接分配方法的一个变种。FAT用于MS—DOSandOS/2操作系统,每个分区的开始部分用于存储该FAT表。每块都在该表中有一项,该表可通过块号码来索引。3四、课程设计的分工团队成员负责模块1、用户界面的设计2、建立目录3、删除目录4、显示目录内容5、程序测试6、程序使用说明1、流程图的制作2、建立文件3、写文件4、读文件5、关闭文件6、删除文件1、课程设计的分析2、数据结构的设计3、打开文件4、显示文件内容5、改变文件的属性6、程序设计报告4五、总体设计1、系统功能流程图:文件系统建立目录显示目录内容删除目录建立文件打开文件读文件写文件关闭文件删除文件显示文件内容改变文件属性2、数据结构设计(1)目录结构typedefstruct{charname[3];//文件或目录名chartype[2];//文件类型名charattribute;//属性charaddress;//文件或目录的起始盘块号charlength;//文件长度,以盘块为单位}content;(2)已达开文件表中读写指针的结构typedefstruct{intdnum;//磁盘盘块号intbnum;//磁盘盘块内第几个字节}pointer;(3)已打开文件表项类型定义typedefstruct{charname[20];//文件绝对路径名5charattribute;//文件的属性,用1个字节表示,char类型intnumber;//文件起始盘块号intlength;//文件长度,文件占用的字节数intflag;//操作类型,用0表示以读操作方式开文件的,用1表示写操作方式打开文件的pointerread;//读文件的位置,文件刚打开时dnum为文件起始盘pointerwrite;//写文件的位置,文件刚建立时dnum为文件起始盘块号,bnum为0,文件打开时为文件的末尾}OFILE;(4)已打开文件表定义struct{OFILEfile[n];//已打开文件表intlength;//已打开文件表中登记的文件数量}openfile;6六、详细设计1、建立目录函数intmd(char*name)功能流程图2、删除目录函数intrm(char*name)功能流程图开始查找该目录是否存在目录不存在是否是根目录根目录不能删除子目录是否为空非空目录不能删除删除空目录将该文件的目录置成空目录删除该子目录占用的盘块结束NYNYYN73、显示目录函数intdir(char*name)功能流程图开始找目录路径找不到目录不存在结束Y显示打印的信息盘块中还有文件,还未结束输出结束Y84、建立文件函数intcreate_file(char*name,intattribute)功能流程图开始名name,属性attributeAttribute%2==1?只读文件无法写不能建立结束YOpenfile.length==n已打开表已满,不能建立Y结束N分离路径分离文件名K==0错误文件名或目录结束分离类型名能找到目录路径?目录路径不存在,不能建立结束N读出盘块内容存在文件名字?文件已存在,建立失败结束文件没有遇到终结符或是文件不存在B=tYYB==-1目录无空间填写目录项填写已打开的文件结束不能分配磁盘块建立文件失败95、打开文件函数intopen_file(char*name,intattribute)功能流程图打开路径名为name的文件查找该文件目录项在已打开文件表中插入该文件登记项找到该文件目录项文件属性与操作类型相符操作不合法,无法打开文件文件不存在,无法打开文件开始结束YYNN106、写文件函数intwrite_file(char*name,char*buff,intlength)功能流程图读buffre内容写入name文件length字节查找已打开文件表文件打开文建以写方式打开?从已打开的文件表得到读指针:盘块号dum,字节位置bnumT=0t=length?修改读指针的bunum;Bnum=bunum+1T=t+1文件长度+1开始T=t+1写完一个盘块将buffer写入盘块YNYY文件未打开无法写文件结束N文件不能读结束Y写文件结束结束申请一个磁盘块dd申请成功磁盘块,不能继续结束修改写指针,bnum=1;dnum=dd117、读文件函数intread_file(char*name,intlength)功能流程图读name文件length字节查找已打开文件表文件打开文建以读方式打开?从已打开的文件表得到读指针:将盘块dum读入缓冲bufferT=0文件未结束且t=length?显示读出内容修改读指针的bunum;Bnum=bunum+1开始T=t+1读完一个盘块修改读指针:bnum=0:dnum=文件分配,表第dnum项将盘块dnum读入缓冲bufferYNYY文件未打开结束N文件不能读结束Y该文件结束结束NN128、删除文件函数intDelete(char*name)功能流程图删除路径名为name的文件在已打开文件表中查找路径名为name的登记项i找到文件等级项删除第i项;Openfile.file[i]=openfile.file[openfile.length-1]Openfile.length=openfile.length-1文件没有打开,删除失败开始结束YN9、关闭文件函数intclose_file(char*name)功能流程图开始打开的文件中是否有该文件没有改文件,关闭失败是否有写文件的追加文件结束符继续写文件,查找文件位置,修改文件长度。在已打开文件表中删除该文件的登记项结束NYNY1310、显示文件内容函数chartypefile(char*name)功能流程图开始能找到该文件名文件不存在结束N是否为可读文件N开始读取文件内容未到终点Y显示文件全部内容显示文件内容结束N11、改变文件属性函数intchange(char*name,intattribute)功能流程图1412、分配磁盘内存块函数intallocate()功能流程图开始将模拟磁盘的文件指针移至模拟磁盘块FAT中FAT表中第一个盘块读入模拟缓冲buffer1中Buffer【I】==0分配第i块磁盘块,修改FAT值并写回磁盘中将Fat表中第二个潘快读入模拟缓冲buffer1中YNBuffer[i]==0分配第I+64快磁盘块,修改FAT值幷写会磁盘I64没有磁盘空间结束I631513、在已打开文件表中插入文件函数intiopen(content*x)功能流程图开始插入路径名为name的文件在已打开文件表中查找路径名为name的登记项找到文件登记项?已打开文件表已满文件登记表满无法打开文件在openfile.file[length]处填写该文件的各项内容:Openfile.length=openfile.length+1文件已打开结束NNY14、在已打开文件表中删除文件函数voiddopen(char*name)功能流程图1615、在已打开文件表中查找文件intsopen(char*name)功能流程图开始打开根目录查找判断根目录路径名为空?Return(2)YK=0判断起始路径名是否为’/’K=1Y根目录的起始盘块号I=2Last=1?Pna=从根目录分离出‘、’后一个目录名N结束Y查找文件输入名称中有.and选择8选项结束查找失败寻找路径下文件名等于pna的文件读取下一个盘块,继续查找继续查找查找结束1716、voidcopen(OFILE*x1,OFILE*x2)17、查找路径名为name的文件或目录函数intsearch(char*name,intflag,int*dnum,int*bnum)功能流程图开始查找文件绝对路径名nameI=根目录的起始盘块好Pan=从name中分离出“/”后下一个目录或文件名:若是文件,分离出类型名type若pna为目录名或文件名最后一部分,last=1是绝对路径的一部分且是文件名J=0J=0第j项是该盘块一项第j项是该盘块一项第j项是目录且名字等于pna文件名为pna且类型名为typeLast==1?查找成功查找失败:该文件或目录不存在查找成功结束NYYYNYYJ=j+1I=该目录起始盘块号J=j+118七、程序测试与测试结果1、建立目录2、在a目录下建立文件,
本文标题:操作系统课程设计磁盘文件操作报告
链接地址:https://www.777doc.com/doc-3897859 .html