操作系统课程设计报告 虚拟文件系统的实现_第1页
操作系统课程设计报告 虚拟文件系统的实现_第2页
操作系统课程设计报告 虚拟文件系统的实现_第3页
操作系统课程设计报告 虚拟文件系统的实现_第4页
操作系统课程设计报告 虚拟文件系统的实现_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

计算机科学与工程学院综合设计报告设计名称操作系统综合设计设计题目虚拟文件系统的实现学生学号专业班级计工02学生姓名学生成绩指导教师(职称)课题工作时间12年2月13日至12年2月24日说明1、报告中的第一、二、三项由指导教师在综合设计开始前填写并发给每个学生;四、五两项(中英文摘要)由学生在完成综合设计后填写。2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。3、指导教师评语一栏由指导教师就学生在整个设计期间的平时表现、设计完成情况、报告的质量及答辩情况,给出客观、全面的评价。4、所有学生必须参加综合设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。答辩小组成员应由2人及以上教师组成。5、报告正文字数一般应不少于5000字,也可由指导教师根据本门综合设计的情况另行规定。6、平时表现成绩低于6分的学生,其综合设计成绩按不及格处理。7、此表格式为计算机科学与工程学院提供的基本格式(适用于学院各类综合设计),各教研室可根据本门综合设计的特点及内容做适当的调整,并上报学院批准。成绩评定表学生姓名学号班级09计算机2班类别合计分值各项分值评分标准实际得分合计得分备注平时表现1010按时参加综合设计,无旷课、迟到、早退、违反实验室纪律等情况。20按设计任务书的要求完成了全部任务,能完整演示其设计内容,符合要求。完成情况3010能对其设计内容进行详细、完整的介绍,并能就指导教师提出的问题进行正确的回答。10报告文字通顺,内容翔实,论述充分、完整,立论正确,结构严谨合理;报告字数符合相关要求,工整规范,整齐划一。5课题背景介绍清楚,综述分析充分。5设计方案合理、可行,论证严谨,逻辑性强,具有说服力。5符号统一;图表完备、符合规范要求。5能对整个设计过程进行全面的总结,得出有价值的结论或结果。报告质量355参考文献数量在3篇以上,格式符合要求,在正文中正确引用。10在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。答辩情况2515在规定时间内能准确、完整、流利地回答教师所提出的问题。总评成绩分补充说明指导教师蔡琼(签字)日期2012年2月24日答辩记录表学生姓名学号班级09计算机2班答辩地点L403号机房答辩内容记录合计分值各项分值评分标准实际得分合计得分备注10在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。答辩成绩2515在规定时间内能准确、完整、流利地回答教师所提出的问题。答辩小组成员(签字)2012年2月24日指导教师评语指导教师蔡琼(签字)日期2012年2月24日一、综合设计目的、条件、任务和内容要求操作系统在计算机科学中是一门核心专业基础课,涉及较多硬件和软件知识。在计算机软、硬件课程的设置上,它起着承上启下的作用。其特点是概念多、较抽象、涉及的知识面广。操作系统综合设计是计算机科学与技术专业学生的一门实践课程,是学习完操作系统课程后的课程设计,本课程的教学目的是,通过学习,使学生了解计算机操作系统的发展特点;理解操作系统的基本概念、组成和各部分的功能;掌握计算机操作系统设计的基本原理和方法;理解常见操作系统的结构原理并能熟练使用。虚拟文件系统的实现课题,要求学生了解文件类型及文件系统模型,理解文件的逻辑结构类型及特点,理解文件外存的分配方式,掌握文件的目录管理及存储空间管理,理解文件的安全性和数据一致性。培养学生的抽象思维能力、逻辑推理能力和形式化思维方法,增强分析问题和解决问题的能力。设计任务和内容要求在WINDOWS或者LINUX下设计一个二级(或者树型)结构文件系统,要求至少实现以下功能LOGIN用户登录、DIR列出文件目录、CREATE创建文件、DEL删除文件、OPEN打开文件、CLOSE关闭文件、READ读文件、WRITE写文件、CD进入子目录、RD删除子目录、MD创建子目录等。设计提示实现虚拟文件系统的一般思路是调用系统的文件创建(如C中的FOPEN函数的W方式即可)一个新文件,将此文件作为虚拟磁盘,在完成本设计要求的内容时,要求所生成的文件目录以及文件等内容都是存储在此磁盘中。指导教师签字蔡琼2012年1月8日二、进度安排第1周213214学生熟悉课题的任务和要求,查阅相关文献和资料,并做好编码准备第1周215217程序编码、调试第2周220222程序编码、调试和测试,书写报告第2周223224答辩、检查、验收、递交设计报告三、应收集资料及主要参考文献应收集的资料面向对象程序设计思想和方法高级程序设计语言参考手册操作系统、软件工程方面参考书籍主要参考文献(1)李小林,张俊程序设计基础Z北京中国铁道出版社,2008(2)汤小丹等计算机操作系统Z西安西安电子科技大学出版社,2007(3)严蔚敏,吴伟民数据结构Z北京清华大学出版社,2007四、综合设计摘要操作系统在计算机科学中是一门核心专业基础课,涉及较多硬件和软件知识。在计算机软、硬件课程的设置上,它起着承上启下的作用。其特点是概念多、较抽象、涉及的知识面广。操作系统综合设计是计算机科学与技术专业学生的一门实践课程,是学习完操作系统课程后的课程设计,本课程的教学目的是,通过学习,使学生了解计算机操作系统的发展特点;理解操作系统的基本概念、组成和各部分的功能;掌握计算机操作系统设计的基本原理和方法;理解常见操作系统的结构原理并能熟练使用。本此课程设计的课题是设计一二级结构文件系统,要求学生了解文件类型及文件系统模型,理解文件的逻辑结构类型及特点,理解文件外存的分配方式,掌握文件的目录管理及存储空间管理,理解文件的安全性和数据一致性。培养学生的抽象思维能力、逻辑推理能力和形式化思维方法,增强分析问题和解决问题的能力。关键词操作系统;虚拟文件;二级结构5、综合设计ABSTRACTTHEOPERATINGSYSTEMINCOMPUTERSCIENCEISACOREFUNDAMENTALCOURSE,INVOLVESMOREHARDWAREANDSOFTWAREKNOWLEDGEINCOMPUTERSOFTWAREANDHARDWAREOFTHECOURSESETTING,ITPLAYSTHEROLEOFTHELINKITSCHARACTERISTICISMORE,MOREABSTRACTCONCEPT,INVOLVINGAWIDERRANGEOFKNOWLEDGETHEOPERATINGSYSTEMISINTEGRATEDDESIGNOFCOMPUTERSCIENCEANDTECHNOLOGYMAJORSTUDENTSAPRACTICALCOURSES,ISAFTERSTUDYINGTHEOPERATINGSYSTEMOFTHECOURSEDESIGNCURRICULUM,THETEACHINGPURPOSEOFTHISCOURSEIS,THROUGHTHESTUDY,MAKESTUDENTSUNDERSTANDTHEDEVELOPMENTOFTHECOMPUTEROPERATINGSYSTEMCHARACTERISTICSUNDERSTANDINGTHEBASICCONCEPTOFTHEOPERATINGSYSTEM,COMPOSITIONANDTHEFUNCTIONSOFTHEPARTSOFTHEGOODCOMPUTEROPERATINGSYSTEMTHEBASICPRINCIPLEOFDESIGNANDTHEMETHODUNDERSTANDCOMMONOPERATINGSYSTEMSTRUCTURETHEORYANDBEFAMILIARWITHTHECOURSEDESIGNOFTHESUBJECTISTODESIGNTHESTRUCTUREOF12FILESYSTEM,STUDENTSAREREQUIREDTOUNDERSTANDFILETYPEANDFILESYSTEMMODEL,UNDERSTANDTHELOGICSTRUCTURETYPEANDFILECHARACTERISTICS,UNDERSTANDDOCUMENTSALLOCATIONOFCRT,MASTERFILEDIRECTORYMANAGEMENTANDSTORAGESPACEMANAGEMENT,UNDERSTANDTHESECURITYOFDOCUMENTSANDDATACONSISTENCYTHECULTIVATIONOFTHESTUDENTSABILITYTOTHINKABSTRACTLY,LOGICALREASONINGABILITYANDFORMALTHINKINGMETHOD,STRENGTHENTHEABILITYTOANALYZEANDSOLVEPROBLEMSKEYWORDSOPERATINGSYSTEMVIRTUALFILETHESECONDARYSTRUCTURE目录摘要2ABSTRACT2第一章课题背景311课题简介3111课题背景3112课题目的3113要求及内容312原理与内容3121理论依据3122课题内容3第二章设计简介及设计方案论述421设计简介422设计方案论述423概要设计4231数据结构4232主要操作函数5第三章详细设计631系统分析632文件基本操作633算法流程图7第四章设计结果及分析841文件系统功能842系统测试843运行结果分析10总结11致谢12参考文献13附录主要程序代码14摘要操作系统在计算机科学中是一门核心专业基础课,涉及较多硬件和软件知识。在计算机软、硬件课程的设置上,它起着承上启下的作用。其特点是概念多、较抽象、涉及的知识面广。操作系统综合设计是计算机科学与技术专业学生的一门实践课程,是学习完操作系统课程后的课程设计,本课程的教学目的是,通过学习,使学生了解计算机操作系统的发展特点;理解操作系统的基本概念、组成和各部分的功能;掌握计算机操作系统设计的基本原理和方法;理解常见操作系统的结构原理并能熟练使用。本此课程设计的课题是设计一二级结构文件系统,要求学生了解文件类型及文件系统模型,理解文件的逻辑结构类型及特点,理解文件外存的分配方式,掌握文件的目录管理及存储空间管理,理解文件的安全性和数据一致性。培养学生的抽象思维能力、逻辑推理能力和形式化思维方法,增强分析问题和解决问题的能力。关键词操作系统;虚拟文件;二级结构ABSTRACTTHEOPERATINGSYSTEMINCOMPUTERSCIENCEISACOREFUNDAMENTALCOURSE,INVOLVESMOREHARDWAREANDSOFTWAREKNOWLEDGEINCOMPUTERSOFTWAREANDHARDWAREOFTHECOURSESETTING,ITPLAYSTHEROLEOFTHELINKITSCHARACTERISTICISMORE,MOREABSTRACTCONCEPT,INVOLVINGAWIDERRANGEOFKNOWLEDGETHEOPERATINGSYSTEMISINTEGRATEDDESIGNOFCOMPUTERSCIENCEANDTECHNOLOGYMAJORSTUDENTSAPRACTICALCOURSES,ISAFTERSTUDYINGTHEOPERATINGSYSTEMOFTHECOURSEDESIGNCURRICULUM,THETEACHINGPURPOSEOFTHISCOURSEIS,THROUGHTHESTUDY,MAKESTUDENTSUNDERSTANDTHEDEVELOPMENTOFTHECOMPUTEROPERATINGSYSTEMCHARACTERISTICSUNDERSTANDINGTHEBASICCONCEPTOFTHEOPERATINGSYSTEM,COMPOSITIONANDTHEFUNCTIONSOFTHEPARTSOFTHEGOODCOMPUTEROPERATINGSYSTEMTHEBASICPRINCIPLEOFDESIGNANDTHEMETHODUNDERSTANDCOMMONOPERATINGSYSTEMSTRUCTURETHEORYANDBEFAMILIARWITHTHECOURSEDESIGNOFTHESUBJECTISTODESIGNTHESTRUCTUREOF12FILESYSTEM,STUDENTSAREREQUIREDTOUNDERSTANDFILETYPEANDFILESYSTEMMODEL,UNDERSTANDTHELOGICSTRUCTURETYPEANDFILECHARACTERISTICS,UNDERSTANDDOCUMENTSALLOCATIONOFCRT,MASTERFILEDIRECTORYMANAGEMENTANDSTORAGESPACEMANAGEMENT,UNDERSTANDTHESECURITYOFDOCUMENTSANDDATACONSISTENCYTHECULTIVATIONOFTHESTUDENTSABILITYTOTHINKABSTRACTLY,LOGICALREASONINGABILITYANDFORMALTHINKINGMETHOD,STRENGTHENTHEABILITYTOANALYZEANDSOLVEPROBLEMSKEYWORDSOPERATINGSYSTEMVIRTUALFILETHESECONDARYSTRUCTURE第一章课题背景11课题简介111课题背景操作系统在计算机科学中是一门核心专业基础课,涉及较多硬件和软件知识。在计算机软、硬件课程的设置上,它起着承上启下的作用。其特点是概念多、较抽象、涉及的知识面广。112课题目的通过学习,使学生了解计算机操作系统的发展特点;理解操作系统的基本概念、组成和各部分的功能;掌握计算机操作系统设计的基本原理和方法;理解常见操作系统的结构原理并能熟练使用。113要求及意义了解文件类型及文件系统模型,理解文件的逻辑结构类型及特点,理解文件外存的分配方式,掌握文件的目录管理及存储空间管理,理解文件的安全性和数据一致性。培养学生的抽象思维能力、逻辑推理能力和形式化思维方法,增强分析问题和解决问题的能力。12原理与内容121理论依据文件系统是LINUX操作系统的重要组成部分,LINUX文件具有强大的功能。文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有LINUX用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。122课题内容在WINDOWS或者LINUX下设计一个二级(或者树型)结构文件系统,要求至少实现以下功能LOGIN用户登录、DIR列出文件目录、CREATE创建文件、DEL删除文件、OPEN打开文件、CLOSE关闭文件、READ读文件、WRITE写文件、CD进入子目录、RD删除子目录、MD创建子目录等。第二章设计简介及设计方案论述21设计简介本系统是模拟实现多用户多目录的文件系统,在系统出现登录后,输入用户与口令,在用户登录系统后,可建立文件卷,将用户输入的文件保存在指定的文件中。系统的命令与其命令的具体实现,此模拟系统共提供了上述命令,并根据命令的含义与要求,用C编程来完成所有具体操作。该系统可以模拟完成用户的登陆和验证,列出文件和目录,新建目录,改变目录,创立和编写文件,删除文件和退出系统等功能22设计方案论述本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。首先应确定文件系统的数据结构主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如FILE0,FILE1,FILE2并以编号作为物理地址,在目录中进行登记。23概要设计231数据结构STRUCTFATITEM/SIZE8/INTITEM/存放文件下一个磁盘的指针/CHAREM_DISK/磁盘块是否空闲标志位0空闲/STRUCTDIRECT/文件控制快信息/STRUCTFCBCHARNAME9/文件/目录名8位/CHARPROPERTY/属性1位目录0位普通文件/INTSIZE/文件/目录字节数、盘块数/INTFIRSTDISK/文件/目录起始盘块号/INTNEXT/子目录起始盘块号/INTSIGN/1是根目录0不是根目录/DIRECTITEMMSD2STRUCTOPENTABLESTRUCTOPENTTABLEITEMCHARNAME9/文件名/INTFIRSTDISK/起始盘块号/INTSIZE/文件的大小/OPENITEMMOFNINTCUR_SIZE/当前打文件的数目/232主要操作函数INTCREATECHARNAMEINTOPENCHARNAMEINTCLOSECHARNAMEINTWRITEINTFD,CHARBUF,INTLENINTREADINTFD,CHARBUFINTDELCHARNAMEINTMKDIRCHARNAMEINTRMDIRCHARNAMEVOIDDIRINTCDCHARNAMEVOIDPRINTVOIDSHOW第3章详细设计31系统分析本次设计的“模拟二级文件管理系统”利用的是二级目录管理方式,分别由用户文件目录FAT、主文件目录ROOT构成。其中FAT由用户的所有文件块组成,在FAT中每个用户目录文件占用一个目录项,其中目录项中包含用户名、用户密码以及指向用户文件目录文件链表的指针。32文件基本操作创建文件创建一个新文件时,系统首先要为新文件申请必要的外存空间,并在FAT中为文件分配一个目录项。目录项中应记录新建文件的文件名、文件总容量、当前已经使用的容量、文件属性、文件在磁盘中的起始位置。删除文件当已不在需要某文件时,可将它从文件系统中删除。在删除时,首先在FAT的文件链表中找到与该文件对应的文件结点,然后确认文件是否处于关闭状态,若以上条件都满足,则系统就可以把结点从文件链表中删除,然后回收改结点对应的磁盘空间。打开文件只有处于打开状态的文件才能被读取、写入、重复关闭且不能被删除。关闭文件只有处于关闭状态的文件才能被删除,且不能被重复关闭。列文件目录用户只能获取自己建立的文件或其他用户共享的文件的列表,并可以查看所用户建立的文件列表。写文件用户可以把相关数据写入到用户自定义的文件中(磁盘上);待写文件必须处于打开状态,且不能是其他用户共享的文件。读文件用户可以把文件中存储的数据读取出来;待读文件必须处于打开状态;用户既可以读取自己建立的文件,也可以读取其他用户共享的文件。建子目录输入目录名,若存在于该文件名相同的目录,这创建失败;若无,则查找空闲的磁盘,将该磁盘置为分配状态,填写目录项,分配地址后,子目录创建成功。删除目录输入名字,查找是否存在该文件或目录,若为文件,则不能删除;若存在,找到起始盘块号,并将其释放,修改目录项,删除成功。33算法流程图开始初始化磁盘有无该用户登录/注册注册新用户注册登录分析命令Y显示无此用户N创建文件打开文件关闭文件读文件写文件列文件目录删除文件注销用户退出系统END提示错误指令成功执行YN框图1程序整体框架第四章设计结果及分析41文件系统功能系统具有如下基本功能LOGIN用户登录DIR列目录CREATE创建文件DELETE删除文件OPEN打开文件CLOSE关闭文件READ读文件WRITE写文件CD进出目录MKDIR创建子目录RMDIR删除子目录42系统测试1LOGIN用户登录2MKDIR创建子目录3CD进出目录4CREATE创建文件5CLOSE关闭文件6OPEN打开文件7WRITE写文件8READ读文件9DIR列目录10DELETE删除文件11RMDIR删除子目录43运行结果分析从上述运行过程可以看出,用户登录系统后,界面将显示文件或目录的基本操作,然后根据相应操作,完成系统的基本要求。本次程序的运行结果与预期结果最终达到了一致。自运行阶段,虽然每次都能得到运行结果,但是操作界面有时不是很完美,于是通过修改程序代码,不断执行程序,进行完善,直到得出满意的操作界面为止。在该过程中,验证了本次课程设计所要求的基本功能,虽然有些操作不是很完善,但大体上都能实现。其中最令我不满意的是DIR功能。该功能只是列出目录名,不能显示目录其他信息,是本次课程设计最大败笔。总结课程设计是对我们平时学习的一种考察,我们要正确地对待。不断地锻炼自己动手动脑的能力、把知识赋予实践就是我们学习的目标既然学校给我们这么好的机会,让我们自己在实验室作操作,我们应该好好抓住机会,把我们平时学习的东西用自己的作品展现出来。这次,我做的是模拟LINUX二级文件系统设计的课程主题,这给了我充分锻炼的机会。我会用自己学到的东西的设计出一副好的作品。LINUX系统中的文件系统是人们最感兴趣的,也是最成功的一部分。它既有很强的功能,又非常灵活,而且在具体的实现技术上也有许多独到之处,致使后来有不少操作系统的设计者都仿效了LIUX操作系统中的文件系统去开发自己的文件系统。而对于我来说,这种最灵活的知识却是最难掌握的。也因为对其基本知识掌握的不好,在这一次的设计过程中遇到很多的困难,特别是物理盘块和逻辑文件之间的对应。在经过与同学进行沟通和交流并反复的测试之后,才明白了设计的函数,而且完善了部分函数的主要功能。通过两星期的操作系统课程设计实习,让我对LINUX文件系统有了深层次的了解和掌握,也通过了自己的能力体会到了编程的乐趣。最重要的是学会了关于设计分析和以前C语言学习过程中没有及时巩固的知识,对C程序设计又有了更进一步的认识,对一些细节的结构体语句有了更深刻的理解。所以这是一次很难得的实践机会,让我真正用心编程,学到了课本以外更深刻更重要的实践经验。非常感谢老师提供这次机会,在这个课程设计过程中我受益匪浅,希望以后在这样的锻炼中不断成长,提高自己各方面的能力我相信通过我以后很加刻苦的学习,我会更加热爱我的专业课程。致谢在本次课程设计的整个过程中,要特别感谢自始至终给我提供帮助和指导的刘黎志老师,是他耐心的指导才使得本次设计得以顺得完成,同时,也要感谢其他同学的无私帮助,在此还要特别感谢为我们提供良好上机环境的学校。如果没有以上老师,同学和学校的帮助和支持,本次设计实难完成。再次感谢老师的精心辅导和同学的相互帮助,使我们顺利完成此次设计以及为学习以后的科目打下良好的基础。参考文献1李小林,张俊程序设计基础Z北京中国铁道出版社,20082汤小丹等计算机操作系统Z西安西安电子科技大学出版社,20073严蔚敏,吴伟民数据结构Z北京清华大学出版社,2007附录主要代码源程序INCLUDEINCLUDEINCLUDEDEFINEMEM_D_SIZE10241024/总磁盘空间为MDEFINEDISKSIZE1024/磁盘块的大小KDEFINEDISK_NUM1024/磁盘块数目KDEFINEFATSIZEDISK_NUMSIZEOFSTRUCTFATITEM/FAT表大小DEFINEROOT_DISK_NOFATSIZE/DISKSIZE1/根目录起始盘块号DEFINEROOT_DISK_SIZESIZEOFSTRUCTDIRECT/根目录大小DEFINEDIR_MAXSIZE1024/路径最大长度为KBDEFINEMSD5/最大子目录数DEFINEMOFN5/最大文件深度为DEFINEMAX_WRITE1024128/最大写入文字长度KBSTRUCTFATITEM/SIZE8/INTITEM/存放文件下一个磁盘的指针/CHAREM_DISK/磁盘块是否空闲标志位0空闲/STRUCTDIRECT/文件控制快信息/STRUCTFCBCHARNAME9/文件/目录名8位/CHARPROPERTY/属性1位目录0位普通文件/INTSIZE/文件/目录字节数、盘块数/INTFIRSTDISK/文件/目录起始盘块号/INTNEXT/子目录起始盘块号/INTSIGN/1是根目录0不是根目录/DIRECTITEMMSD2STRUCTOPENTABLESTRUCTOPENTTABLEITEMCHARNAME9/文件名/INTFIRSTDISK/起始盘块号/INTSIZE/文件的大小/OPENITEMMOFNINTCUR_SIZE/当前打文件的数目/STRUCTFATITEMFAT/FAT表/STRUCTDIRECTROOT/根目录/STRUCTDIRECTCUR_DIR/当前目录/STRUCTOPENTABLEU_OPENTABLE/文件打开表/INTFD1/文件打开表的序号/CHARBUFFERDIR/记录当前路径的名称/CHARFDISK/虚拟磁盘起始地址/VOIDINITFILEVOIDFORMATVOIDENTERVOIDHALTINTCREATECHARNAMEINTOPENCHARNAMEINTCLOSECHARNAMEINTWRITEINTFD,CHARBUF,INTLENINTREADINTFD,CHARBUFINTDELCHARNAMEINTMKDIRCHARNAMEINTRMDIRCHARNAMEVOIDDIRINTCDCHARNAMEVOIDPRINTVOIDSHOWVOIDINITFILEFDISKCHARMALLOCMEM_D_SIZESIZEOFCHAR/申请1M空间/FORMATVOIDFORMATINTIFILEFPFATSTRUCTFATITEMFDISKDISKSIZE/计算FAT表地址,引导区向后偏移1K/初始化FAT表/FAT0ITEM1/引导块/FAT0EM_DISK1FORI1IDIRECTITEM0SIGN1ROOTDIRECTITEM0FIRSTDISKROOT_DISK_NOSTRCPYROOTDIRECTITEM0NAME,“ROOTDIRECTITEM0NEXTROOTDIRECTITEM0FIRSTDISKROOTDIRECTITEM0PROPERTY1ROOTDIRECTITEM0SIZEROOT_DISK_SIZE/指向上一级目录的目录项/ROOTDIRECTITEM1SIGN1ROOTDIRECTITEM1FIRSTDISKROOT_DISK_NOSTRCPYROOTDIRECTITEM1NAME,“ROOTDIRECTITEM1NEXTROOTDIRECTITEM0FIRSTDISKROOTDIRECTITEM1PROPERTY1ROOTDIRECTITEM1SIZEROOT_DISK_SIZEIFFPFOPEN“DISKDAT“,“WB“NULLPRINTF“ERRORNCANNOTOPENFILEN“RETURNFORI2IDIRECTITEMISIGN0ROOTDIRECTITEMIFIRSTDISK1STRCPYROOTDIRECTITEMINAME,“ROOTDIRECTITEMINEXT1ROOTDIRECTITEMIPROPERTY0ROOTDIRECTITEMISIZE0IFFPFOPEN“DISKDAT“,“WB“NULLPRINTF“ERRORNCANNOTOPENFILEN“RETURNIFFWRITEFDISK,MEM_D_SIZE,1,FP1/把虚拟磁盘空间保存到磁盘文件中/PRINTF“ERRORNFILEWRITEERRORN“FCLOSEFPVOIDENTERFILEFPINTIFDISKCHARMALLOCMEM_D_SIZESIZEOFCHAR/申请1M空间/IFFPFOPEN“DISKDAT“,“RB“NULLPRINTF“ERRORNCANNOTOPENFILEN“RETURNIFFREADFDISK,MEM_D_SIZE,1,FP/把磁盘文件DISKDAT读入虚拟磁盘空间内存/PRINTF“ERRORNCANNOTREADFILEN“EXIT0FATSTRUCTFATITEMFDISKDISKSIZE/找到FAT表地址/ROOTSTRUCTDIRECTFDISKDISKSIZEFATSIZE/找到根目录地址/FCLOSEFP/初始化用户打开表/FORI0I8/文件名大于8位/RETURN1FORJ2JDIRECTITEMJNAME,NAMEBREAKIFJDIRECTITEMIFIRSTDISK1BREAKIFIMSD2/无空目录项/RETURN2IFU_OPENTABLECUR_SIZEMOFN/打开文件太多/RETURN3FORJROOT_DISK_NO1JDISK_NUMRETURN5FATJEM_DISK1/将空闲块置为已经分配/填写目录项/STRCPYCUR_DIRDIRECTITEMINAME,NAMECUR_DIRDIRECTITEMIFIRSTDISKJCUR_DIRDIRECTITEMISIZE0CUR_DIRDIRECTITEMINEXTJCUR_DIRDIRECTITEMIPROPERTY0/FDOPENNAMERETURN0INTOPENCHARNAMEINTI,JFORI2IDIRECTITEMINAME,NAMEBREAKIFIMSD2RETURN1/是文件还是目录/IFCUR_DIRDIRECTITEMIPROPERTY1RETURN4/文件是否打开/FORJ0JMOFN/文件打开太多/RETURN3/查找一个空闲用户打开表项/FORJ0JDIRECTITEMIFIRSTDISKSTRCPYU_OPENTABLEOPENITEMJNAME,NAMEU_OPENTABLEOPENITEMJSIZECUR_DIRDIRECTITEMISIZEU_OPENTABLECUR_SIZE/返回用户打开表表项的序号/RETURNJINTCLOSECHARNAMEINTIFORI0IMOFNRETURN1/清空该文件的用户打开表项的内容/STRCPYU_OPENTABLEOPENITEMINAME,“U_OPENTABLEOPENITEMIFIRSTDISK1U_OPENTABLEOPENITEMISIZE0U_OPENTABLECUR_SIZERETURN0INTWRITEINTFD,CHARBUF,INTLENCHARFIRSTINTITEM,I,J,KINTILEN1,ILEN2,MODLEN,TEMP/用字符作为空格字符作为换行符/CHARSPACE32CHARENDTERNFORI0IDIRECTITEMIFIRSTDISKITEMBREAKTEMPI/存放当前目录项的下标/找到的ITEM是该文件的最后一块磁盘块/WHILEFATITEMITEM1ITEMFATITEMITEM/查找该文件的下一盘块/计算出该文件的最末地址/FIRSTFDISKITEMDISKSIZEU_OPENTABLEOPENITEMFDSIZEDISKSIZE/如果最后磁盘块剩余的大小大于要写入的文件的大小/IFDISKSIZEU_OPENTABLEOPENITEMFDSIZEDISKSIZELENSTRCPYFIRST,BUFU_OPENTABLEOPENITEMFDSIZEU_OPENTABLEOPENITEMFDSIZELENCUR_DIRDIRECTITEMTEMPSIZECUR_DIRDIRECTITEMTEMPSIZELENELSEFORI0I0ILEN2ILEN21/还需要多少块磁盘块/FORJ0JDISK_NUM/如果磁盘块已经分配完了/RETURN1FIRSTFDISKIDISKSIZE/找到的那块空闲磁盘块的起始地址/IFJILEN21/如果是最后要分配的一块/FORK0KDIRECTITEMTEMPSIZECUR_DIRDIRECTITEMTEMPSIZELENRETURN0INTREADINTFD,CHARBUFINTLENU_OPENTABLEOPENITEMFDSIZECHARFIRSTINTI,J,ITEMINTILEN1,MODLENITEMU_OPENTABLEOPENITEMFDFIRSTDISKILEN1LEN/DISKSIZEMODLENLENDISKSIZEIFMODLEN0ILEN1ILEN11/计算文件所占磁盘的块数/FIRSTFDISKITEMDISKSIZE/计算文件的起始位置/FORI0IDIRECTITEMINAME,NAMEBREAKCUR_ITEMI/用来保存目录项的序号,供释放目录中/IFIMSD2/如果不在当前目录中/RETURN1IFCUR_DIRDIRECTITEMCUR_ITEMPROPERTY0/如果删除的不是目录/RETURN3FORI0IDIRECTITEMCUR_ITEMFIRSTDISK/该文件的起始盘块号/WHILEITEM1/释放空间,将FAT表对应项进行修改/TEMPFATITEMITEMFATITEMITEM1FATITEMEM_DISK0ITEMTEMP/释放目录项/CUR_DIRDIRECTITEMCUR_ITEMSIGN0CUR_DIRDIRECTITEMCUR_ITEMFIRSTDISK1STRCPYU_OPENTABLEOPENITEMCUR_ITEMNAME,“CUR_DIRDIRECTITEMCUR_ITEMNEXT1CUR_DIRDIRECTITEMCUR_ITEMPROPERTY0CUR_DIRDIRECTITEMCUR_ITEMSIZE0RETURN0INTMKDIRCHARNAMEINTI,JSTRUCTDIRECTCUR_MKDIRIFSTRCMPNAME,“RETURN4IFSTRCMPNAME,“RETURN4IFSTRLENNAME8/如果目录名长度大于8位/RETURN1FORI2IDIRECTITEMIFIRSTDISK1BREAKIFIMSD2/目录/文件已满/RETURN2FORJ2JDIRECTITEMJNAME,NAMEBREAKIFJDISK_NUMRETURN5FATJEM_DISK1/将该空闲块设置为已分配/填写目录项/STRCPYCUR_DIRDIRECTITEMINAME,NAMECUR_DIRDIRECTITEMIFIRSTDISKJCUR_DIRDIRECTITEMISIZEROOT_DISK_SIZECUR_DIRDIRECTITEMINEXTJCUR_DIRDIRECTITEMIPROPERTY1/所创目录在虚拟磁盘上的地址内存物理地址/CUR_MKDIRSTRUCTDIRECTFDISKCUR_DIRDIRECTITEMIFIRSTDISKDISKSIZE/初始化目录/指向当前目录的目录项/CUR_MKDIRDIRECTITEM0SIGN0CUR_MKDIRDIRECTITEM0FIRSTDISKCUR_DIRDIRECTITEMIFIRSTDISKSTRCPYCUR_MKDIRDIRECTITEM0NAME,“CUR_MKDIRDIRECTITEM0NEXTCUR_MKDIRDIRECTITEM0FIRSTDISKCUR_MKDIRDIRECTITEM0PROPERTY1CUR_MKDIRDIRECTITEM0SIZEROOT_DISK_SIZE/指向上一级目录的目录项/CUR_MKDIRDIRECTITEM1SIGNCUR_DIRDIRECTITEM0SIGNCUR_MKDIRDIRECTITEM1FIRSTDISKCUR_DIRDIRECTITEM0FIRSTDISKSTRCPYCUR_MKDIRDIRECTITEM1NAME,“CUR_MKDIRDIRECTITEM1NEXTCUR_MKDIRDIRECTITEM1FIRSTDISKCUR_MKDIRDIRECTITEM1PROPERTY1CUR_MKDIRDIRECTITEM1SIZEROOT_DISK_SIZEFORI2IDIRECTITEMISIGN0CUR_MKDIRDIRECTITEMIFIRSTDISK1STRCPYCUR_MKDIRDIRECTITEMINAME,“CUR_MKDIRDIRECTITEMINEXT1CUR_MKDIRDIRECTITEMIPROPERTY0CUR_MKDIRDIRECTITEMISIZE0RETURN0INTRMDIRCHARNAMEINTI,J,ITEMSTRUCTDIRECTTEMP_DIR/检查当前目录项中有无该目录/FORI2IDIRECTITEMINAME,NAMEBREAKIFIMSD2/没有这个文件或目录/RETURN1IFCUR_DIRDIRECTITEMIPROPERTY1/删除的不是目录/RETURN3/判断要删除的目录有无子目录/TEMP_DIRSTRUCTDIRECTFDISKCUR_DIRDIRECTITEMINEXTDISKSIZEFORJ2JDIRECTITEMJNEXT1BREAKIFJDIRECTITEMIFIRSTDISKFATITEMEM_DISK0/修改目录项/CUR_DIRDIRECTITEMISIGN0CUR_DIRDIRECTITEMIFIRSTDISK1STRCPYCUR_DIRDIRECTITEMINAME,“CUR_DIRDIRECTITEMINEXT1CUR_DIRDIRECTITEMIPROPERTY0CUR_DIRDIRECTITEMISIZE0RETURN0VOIDDIRINTIFORI2IDIRECTITEMIFIRSTDISK1/如果存在子目录/PRINTF“ST“,CUR_DIRDIRECTITEMINAMEIFCUR_DIRDIRECTITEMIPROPERTY0/文件/PRINTF“DTTN“,CUR_DIRDIRECTITEMISIZEELSEPRINTF“TTN“INTCDCHARNAMEINTI,J,ITEMCHARSTRCHARTEMP,POINT,POINT1STRUCTDIRECTTEMP_DIRTEMP_DIRCUR_DIRSTRNAMEIFSTRCMP“,NAMECUR_DIRROOTSTRCPYBUFFERDIR,“ROOT“RETURN0TEMPCHARMALLOCDIR_MAXSIZESIZEOFCHAR/最长路径名字分配空间/FORI0IDIRECTITEMJNAME,TEMPBREAKFREETEMP/释放申请的临时空间/IFTEMP_DIRDIRECTITEMJPROPERTY1/打开的不是目录/RETURN2IFJMSD2/不在当前目录/RETURN1ITEMTEMP_DIRDIRECTITEMJFIRSTDISK/当前目录在磁盘中位置/TEMP_DIRSTRUCTDIRECTFDISKITEMDISKSIZEIFSTRCMP“,NAMEIFCUR_DIRDIRECTITEMJ1SIGN1/如果上级目录不是根目录/POINTSTRCHRBUFFERDIR,/查找字符串BUFFERDIR中首次出现字符的位置WHILEPOINTNULLPOINT1POINT1/减去所占的空间,记录下次查找的起始地址/POINTSTRCHRPOINT1,POINT110/将上一级目录删除/ELSE/IFNAME0BUFFERDIRSTRCATBUFFERDIR,“/修改当前目录/BUFFERDIRSTRCATBUFFERDIR,NAMECUR_DIRTEMP_DIR/将当前目录确定下来/RETURN0VOIDSHOWPRINTF“S“,BUFFERDIRVOIDPRINTPRINTF“N“PRINTF“文件系统设计N“PRINTF“T命令格式说明N“PRINTF“TCD目录名更改当前目录N“PRINTF“TMKDIR目录名创建子目录N“PRINTF“TRMDIR目录名删除子目录N“PRINTF“TDIR显示当前目录的子目录N“PRINTF“TCREATE文件名创建文件N“PRINTF“TDEL文件名删除文件N“PRINTF“TOPEN文件名打开文件N“PRINTF“TCLOSE文件名关闭文件N“PRINTF“TREAD读文件N“PRINTF“TWRITE写文件N“PRINTF“TEXIT退出系统N“PRINTF“N“VOIDMAINFILEFPCHARCHCHARA100CHARCODE1110CHARNAME10INTI,FLAG,R_SIZECHARCONTECTCONTECTCHARMALLOCMAX_WRITESIZEOFCHARIFFPFOPEN“DISKDAT“,“RB“NULLPRINTF“YOUHAVENOTFORMAT,DOYOUWANTFORMATY/N“SCANF“C“,IFCHYINITFILEPRINTF“SUCCESSFULLYFORMATN“ELSERETURNENTERPRINTSHOWSTRCPYCODE0,“EXIT“STRCPYCODE1,“CREATE“STRCPYCODE2,“OPEN“STRCPYCODE3,“CLOSE“STRCPYCODE4,“WRITE“STRCPYCODE5,“READ“STRCPYCODE6,“DEL“STRCPYCODE7,“MKDIR“STRCPYCODE8,“RMDIR“STRCPYCODE9,“DIR“STRCPYCODE10,“CD“WHILE1SCANF“S“,AFORI0I11IIFSTRCMPCODEI,ABREAKSWITCHICASE0/退出文件系统FREECONTECTHALTRETURNCASE1/创建文件SCANF“S“,NAMEFLAGCREATENAMEIFFLAG1PRINTF“ERRORNTHELENGTHISTOOLONGN“ELSEIFFLAG2PRINTF“ERRORNTHEDIRECTITEMISALREADYFULLN“ELSEIFFLAG3PRINTF“ERR

温馨提示

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

评论

0/150

提交评论