2022年操作系统课程方案指导书版软件 .pdf
个人资料整理仅限学习使用操作系统课程设计指导书试用版)内蒙古工业大学信息工程学院计算机系200912精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 42 页个人资料整理仅限学习使用目 录精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 42 页个人资料整理仅限学习使用操作系统课程设计教案大纲课程编号: 020217008 学时 周): 1 周学分: 1课程英文名称:Operating System of computer 课程类别:技术基础课开出学期:第五学期开出单位 系):计算机系适用专业:软件工程制定人:赵俊生、马志强一、制定依据根据内蒙古工业大学2006 版培养方案、操作系统课程教案大纲等制订本课程设计教案大纲。二、目的与基本要求1 目的操作系统课程设计是操作系统课程的重要实践性环节。通过小型文件系统、银行家算法、主存空间的分配与回收和处理机管理的设计与实现,可以加深学生对课堂中所讲授内容的理解,培养学生的系统开发能力,加强学生的工程经验,使学生初步具有研究、设计、编制和调试操作系统模块的能力。2 基本要求根据操作系统课程设计任务书所确定的设计内容,每位同学选择其中一个设计题目进行一周的设计,针对设计内容查阅相关资料、进行理论分析、确定相应算法并编程实现原型系统;完成原型系统后,按照内蒙古工业大学课程设计说明书书写规范,编写操作系统课程设计说明书;最后进行课程设计答辩。三、基本内容和安排1. 基本内容题目一:文件系统的设计与实现题目二:银行家算法的设计与实现题目三:主存空间的分配与回收题目四:处理机管理2. 安排周一:布置、讲解题目,收集资料;精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 42 页个人资料整理仅限学习使用周二:系统分析,算法设计;周三:编制、调试程序;周四:测试系统,形成设计结论,编写课设报告;周五:系统及材料验收,课设答辩。四、组织及指导方式1. 学生的组织本课设安排四个题目,学号为单号学生选择题目一或三进行设计,学号为双号学生选择题目二或四进行设计,一人一组,设计过程中可以相互讨论。2. 指导方式每班指导教师两人,每人指导一题,跟班指导。五、考核方式及成绩评定1. 考核方式成绩考核采取面试答辩形式。2. 成绩评定由指导教师根据学生在设计中的表现、任务的完成情况、课程设计报告的质量等综合评定。评分标准为:1)完成基本功能占60%;2)设计报告占20%;3)出勤率占10%;4)回答指导教师提问占10%。根据以上四个标准,课程设计成绩按优秀、良好、中等、及格和不及格五级记分制评定。六、教材及主要参考资料1. 教材1 张尧学主编计算机操作系统教程第三版)北京: 清华大学出版社,2006 2. 主要参考书1张尧学编计算机操作系统教程第三版)习题解答与实验指导北京: 清华大学出版社, 2006 2 汤子瀛主编计算机操作系统第三版)西安: 西安电子科技大学出版社,2001 3 张坤等编操作系统实验教程北京: 清华大学出版社,2008 4 张丽芬等编操作系统实验教程北京: 清华大学出版社,2006 5 Andrew S.Tanenbaum. Modern Operating Systems, Second Edition.Englewood Cliffs,N.J,Prentice Hall, 20016 屠祁等编 . 操作系统基础 第三版)北京: 清华大学出版社,2000 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 42 页个人资料整理仅限学习使用7 冯耀霖等编 . 操作系统 .西安 : 西安电子科技大学出版社,2001 8 左万历计算机操作系统教程第二版)北京:高等教育出版社,2004精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 42 页个人资料整理仅限学习使用第一章 设计规范与说明11 设计规范一、问题分析与系统结构的设计充分地分析和理解问题本身。本阶段主要解决“ 要作什么,限制条件是什么” 。首先从问题中抽取合适的数据结构,作为整个系统的底层,解决问题的算法作为上层。定义数据的存储结构及其在这些结构上的操作,使得在上层的应用中可以通过这些操作完成对数据结构层的访问。在这个过程中,要综合考虑系统功能,使所设置的操作要易于系统整体功能的实现。最后写出每个函数的规格说明,包括形参个数和类型、函数的返回类型、函数的前提条件是什么、以及函数的功能。列出函数间的调用关系,可以使用调用关系图表示则更加清晰,这样便完成了系统结构设计。二、详细设计和编码详细设计的目的是对函数的进一步求精。用if、while 和赋值语句等类语言写出算法的框架。利用类语言的目的是避免陷入细节。在编码时,可以对详细设计的结果进一步求精,用高级语言表示出来。应注意以下事项。1程序的每一行最好不超过60个字符。每个函数通常不要太长,以40 行为宜。函数包含的程序行数太多,易于造成阅读困难。2变量定义为:名 +类型。如: LinkList *firstLinkListPointer 。其中 first 为名,后面的 LinkListPointer 说明是链表指针类。3控制 if、while 等语句的嵌套深度,最多不超过5 层。4对每一段程序完成的作用,除非常明显的除外如:x = x + 1。 注释为x 加 1,没有什么意义),都应加以注释。这会对程序的调试提供很多方便。5对每个数据结构和其函数要进行单元测试。6根据情况可以设立若干调试点,即输出若干信息,用于验证和你的设想是否一致。另外,对于输入输出语句,必须对它们的作用加以说明。否则,在调试程序时,无法了解系统需要输入说明,系统输出的又是什么。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 42 页个人资料整理仅限学习使用三、静态检查自己用一组数据手动执行程序;或和同学一起阅读自己的程序,以全面地了解该程序的逻辑。12 报告的整理与形成一、调试报告包括的内容有问题是如何解决的,讨论与分析、改进设想、经验与体会、时空复杂度等。二、源程序清单和结果打印的源程序清单和测试结果附在设计报告的后面。源程序必须有注释,以及必要的测试数据和运行结果数据。注释提倡用英文描述。三、文档及资料的形成在程序开发过程中,逐步形成各种必要的文档及资料。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 42 页个人资料整理仅限学习使用第二章 设计内容21 文件系统的设计与实现一、设计目的通过设计一个小型文件系统,进一步掌握文件管理的方法和技术,使学生初步具有研究、设计、编制和调试操作系统模块的能力。二、设计要求与提示1问题描述在任一 OS 下,建立一个大文件,把它假想成一张盘,在其中实现一个简单的小型文件系统。2基本要求该文件系统没有子目录机制,文件连续分配,不考虑换“盘”和分区。做一个简单的操作界面, 提供五条 简单的命令:dir 、 mkfile 、 type、 copy、delfile,分别用于显示文件目录、建立文件、显示文件内容、复制和删除一个文件。三、设计思想、环境说明和使用工具1设计思想建立一个系统文件 为了说明哪些分区是空闲的,可以用来装入新作业,必须要有一张空闲区说明表,如表3-1 所示。图 3-1 主存空间占用情况表 3-1 空闲区说明表其中,起始地址指出各空闲区的主存起始地址,长度指出空闲区大小。状态有:未分配:该栏目是记录的有效空闲区。空表目:没有登记信息。由于分区个数不定,所以空闲区说明表中应有足够的空表目项。否则造成溢出,无法登记。同样,再设一个已分配区表,记录作业或进程的主存占用情况。操作系统 (10KB 作业 1(10KB 作业 4(25KB 空闲区 1(20KB 作业 2(45KB 空闲区 2(146KB 起始地址长度状态45K 20KB 未分配110K 146KB 未分配空表目空表目空表目0 10K 20K 45K 65K 110K 256K 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 42 页个人资料整理仅限学习使用等于小于大于N Y N Y (2 当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区。有时找到的空闲区可能大于作业需求量,这时应将空闲区一分为二。一个分给作业;另一个仍作为空闲区留在空闲区表中。为了尽量减少由于分割造成的碎片,尽可能分配低地址部分的空闲区,将较大空闲区留在高地址端,以利于大作业的装入。为此在空闲区表中,按空闲区首地址从低到高进行登记。为了便于快速查找,要不断地对表格进行紧缩,即让“空表目”项留在表的后部。其分配框图如图3-2 所示。开始申请 XK 主存J=0 J=J+1 查看第 J个表目的登记项状 态 为 “ 未 分配”吗 ? 长度 =XK? 置状态为“空表将空表目向后移长度 =长度 XK 始址 =始址 XK 作业等待返回登记已分配区表和空闲区表,输出系统中各数据结构的值。返回分配给作业的主存始址。J 为 空 闲区说明表的最后一个表目?精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 42 页个人资料整理仅限学习使用(3 当一个作业执行完成时,作业所占用的分区应归还给系统。在归还时要考虑相邻空闲区合并的问题。作业的释放区与空闲区的邻接分以下4 种情况考虑:A释放区下邻 ( 低地址邻接 空闲区;B释放区上邻 ( 高地址邻接 空闲区;C 释放区上下都与空闲区邻接;D 释放区与空闲区不邻接。首次适应算法回收框图如图33 所示。2环境说明工具: C语言。在 WINDOWS 环境下使用 VC+6.0 进行开发。四、主要的数据结构数据结构说明:#define N 5 structfreearea /*定义一个空闲区说明表结构,并初始化变量*/ int startaddress。 /*空闲区始址 */ int size; /* 空闲区大小 */ int state; /* 空闲区状态: 0为空表目, 1 为可用空闲块 */ freeblockN 20 , 20,1 ,80 , 50, 1 , 150 ,100, 1 ,300,30,0,600,100,1 。五、课程设计应提交的主要内容1写出实现主存的分配和回收程序的数据结构、算法和算法流程图。2打印出程序清单。3写出程序调试及运行情况。4写出系统设计中出现的问题及解决的方法。5课程设计的体会。6自我评价与总结。图 3-2 首次适应算法分配框图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 42 页个人资料整理仅限学习使用N Y N Y Y N Y N 开始S=释放区始址L= 释放区长度查空闲区说明表有与释放区的高地址邻接(上邻 的空闲区吗?有与释放区下邻的空闲区吗?在空闲区说明表中找一空表目登记:始址 =S 长度 =L 状态 =未分配按地址顺序调整和紧缩空闲区说明表L=L 上邻空闲区长度有与释放区下邻的空闲区吗?把上邻空闲区登记栏中的始址改为S,长度改为 L 把上邻空闲区登记栏中的状态置为“空表目”,且将空表 目 向 后 调把下邻空闲区登记栏中的长度改为:长度 =长度 L 有 等 待 装 入的作业吗?返回唤醒等待的作业并返回图 3-3 首次适应算法回收框图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 42 页个人资料整理仅限学习使用24 处理机管理一、设计目的在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。也就是说能运行的进程数远远大于处理机个数。为了使系统中的各进程能有条不紊地运行,必须选择某种调度策略,以选择一进程占有处理机。要求学生设计一个模拟单处理机调度的算法,以巩固和加深处理机调度的概念。二、设计要求1、问题描述处理机管理是操作系统中非常重要的部分。为深入理解处理机调度部分的功能,设计一个按时间片轮转调度CPU 的算法,模拟实现处理机的调度。2基本要求时间片轮转调度CPU 的算法是分时系统采用的典型算法,把CPU 的执行时间分成若干个一定大小的时间片轮流的分配给就绪队列的各个进程,让各就绪进程按指定的顺序分别占用CPU 的一个时间片轮流执行下去,直至完成。要求定义进程控制块PCB 的结构,并为每个进程任意确定一个要求运行时间和到达时间,按照进程到达的先后顺序排成一个循环队列。设计按时间片轮转的进程调度算法。三、设计思想、环境说明和使用工具1设计思想(1假设系统有5 个进程,每个进程用一个进程控制块PCB 来代表。 PCB的格式如图 4-1 所示。进程名链接指针到达时间估计运行时间进程状态图 4-1 进程控制块其中,进程名即进程标识。链接指针:指出下一个到达进程的进程控制块首地址。按照进程到达的顺序排队。系统设置一个队头和队尾指针分别指向第一个和最后一个进程。新生精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 42 页个人资料整理仅限学习使用成的进程放队尾。估计运行时间、到达时间以及进程状态与图3-1中相同。(2为每个进程任意确定一个要求运行时间和到达时间。(3按照进程到达的先后顺序排成一个循环队列。再设一个队首指针指向第一个到达进程的首址。(4执行处理机调度时,开始选择队首的第一个进程运行。另外再设一个当前运行进程指针,指向当前正运行的进程。(5由于本实践是模拟算法,所以对被选中进程并不实际启动运行,而只是执行:估计运行时间减1;输出当前运行进程的名字。用这两个操作来模拟进程的一次运行。(6进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程。同时还应判断该进程的剩余运行时间是否为0。若不为 0,则等待下一轮的运行;若该进程的剩余运行时间为0,则将该进程的状态置为完成态C,并退出循环队列。(7若就绪队列不空,则重复上述的(5和(6步骤直到所有进程都运行完为止。(8在所设计的调度程序中,应包含显示或打印语句。以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。2环境说明工具: C语言。在 WINDOWS 环境下使用 VC+6.0 进行编译及运行。四、主要的数据结构数据结构说明:typedef struct pcb /* 进程控制块定义*/ char pnameN 。 /* 进程名 */ int runtime 。 /*运行时间 */ int arrivetime 。 /* 到达时间 */ char state。 /* 进程状态 */ 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 42 页个人资料整理仅限学习使用 struct pcb *next 。 /*链接指针 */ PCB 。五、课程设计应提交的主要内容1写出实现文件管理的数据结构、算法和算法流程图。2打印出程序清单。3写出程序调试及运行情况。4写出课程设计出现的问题及解决的方法。5课程设计的体会。6自我评价与总结。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 42 页个人资料整理仅限学习使用内蒙古工业大学课程设计任务书一)学院 系):信息学院计算机系课程名称:操作系统课程设计指导教师 签名):专业班级:软件工程 08 学生姓名:学号:一、课程设计题目文件系统的设计与实现二、课程设计的目的通过设计一个小型文件系统,进一步掌握文件管理的方法和技术,使学生初步具有研究、设计、编制和调试操作系统模块的能力。三、课程设计的主要内容和要求包括原始数据、技术参数、设计要求、工作量要求等)原始数据:文件目录项结构体,盘块结构体。技术参数: Windows XP 系统, VC+6.0 开发工具。设计要求:1设计基于位示图的文件连续分配算法;2设计显示文件目录、建立文件、显示文件内容、复制和删除文件算法;3画出以上算法流程图;4编程实现算法功能;5编写课程设计说明书。工作量要求:完成以上设计要求中的所有算法功能。四、工作进度安排周一:布置、讲解题目,收集资料;周二:系统分析,算法设计;周三:编制、调试程序;周四:测试系统,形成设计结论,编写课设报告;周五:系统及材料验收,课设答辩。五、主要参考文献1张尧学编计算机操作系统教程第三版)习题解答与实验指导北京: 清华大学出版社, 2006 2 汤子瀛主编计算机操作系统第三版)西安: 西安电子科技大学出版社,2001 3张坤等编操作系统实验教程北京: 清华大学出版社, 2008精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 42 页个人资料整理仅限学习使用审核批准意见系教研室)主任 签字)内蒙古工业大学课程设计任务书二)学院 系):信息学院计算机系课程名称:操作系统课程设计指导教师 签名):专业班级:软件工程 08 学生姓名:学号:一、课程设计题目银行家算法的设计与实现二、课程设计的目的通过银行家算法设计与实现,可以加深学生对死锁的理解,掌握死锁的预防、避免、检测和解除的基本原理,重点掌握死锁的避免方法银行家算法。使学生初步具有研究、设计、编制和调试操作系统模块的能力。三、课程设计的主要内容和要求包括原始数据、技术参数、设计要求、工作量要求等)技术参数: Windows XP 系统,VC+6.0开发工具。设计要求:1设计银行家算法的核心数据结构、安全性检查算法;2画出银行家算法流程图;3编程实现算法功能;4编写课程设计说明书。工作量要求:完成以上设计要求中的所有算法功能。四、工作进度安排周一:布置、讲解题目,收集资料;周二:系统分析,算法设计;周三:编制、调试程序;周四:测试系统,形成设计结论,编写课设报告;周五:系统及材料验收,课设答辩。五、主要参考文献1张尧学编计算机操作系统教程第三版)习题解答与实验指导北京: 清华大学出版社, 2006 2 汤子瀛主编计算机操作系统第三版)西安: 西安电子科技大学出版社,2001 3张坤等编操作系统实验教程北京: 清华大学出版社, 2008精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 21 页,共 42 页个人资料整理仅限学习使用审核批准意见系教研室)主任 签字)精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 22 页,共 42 页个人资料整理仅限学习使用内蒙古工业大学课程设计任务书三)学院 系):信息学院计算机系课程名称:操作系统课程设计指导教师 签名):专业班级:软件工程 08 学生姓名:学号:一、课程设计题目主存空间的分配与回收二、课程设计的目的通过该课程设计使学生理解在不同的存储管理方式下,如何实现主存空间的分配与回收。使学生初步具有研究、设计、编制和调试操作系统模块的能力。三、课程设计的主要内容和要求包括原始数据、技术参数、设计要求、工作量要求等)原始数据:空闲区说明表结构体。技术参数: Windows XP 系统, VC+6.0 开发工具。设计要求:1设计基于空闲区说明表的可变分区分配与回收算法;2或设计基于空闲区链表的可变分区分配与回收算法;3画出以上算法流程图;4编程实现算法功能;5编写课程设计说明书。工作量要求:完成以上设计要求中的所有算法功能。四、工作进度安排周一:布置、讲解题目,收集资料;周二:系统分析,算法设计;周三:编制、调试程序;周四:测试系统,形成设计结论,编写课设报告;周五:系统及材料验收,课设答辩。五、主要参考文献1张尧学编计算机操作系统教程第三版)习题解答与实验指导北京: 清华大学出版社, 2006 2 汤子瀛主编计算机操作系统第三版)西安: 西安电子科技大学出版社,2001 3张坤等编操作系统实验教程北京: 清华大学出版社, 2008精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 23 页,共 42 页个人资料整理仅限学习使用审核批准意见系教研室)主任 签字)内蒙古工业大学课程设计任务书四)学院 系):信息学院计算机系课程名称:操作系统课程设计指导教师 签名):专业班级:软件工程 08 学生姓名:学号:一、课程设计题目处理机管理二、课程设计的目的学生通过设计一个模拟单处理机调度的算法,以巩固和加深处理机调度的概念。使学生初步具有研究、设计、编制和调试操作系统模块的能力。三、课程设计的主要内容和要求包括原始数据、技术参数、设计要求、工作量要求等)原始数据:进程控制块 PCB结构体。技术参数: Windows XP 系统, VC+6.0 开发工具。设计要求:1设计基于时间片轮转法的处理机调度算法;2或设计基于先来先服务或基于优先权的处理机调度算法;3画出以上算法流程图;4编程实现算法功能;5编写课程设计说明书。工作量要求:完成以上设计要求中的所有算法功能。四、工作进度安排周一:布置、讲解题目,收集资料;周二:系统分析,算法设计;周三:编制、调试程序;周四:测试系统,形成设计结论,编写课设报告;周五:系统及材料验收,课设答辩。五、主要参考文献1张尧学编计算机操作系统教程第三版)习题解答与实验指导北京: 清华大学出版社, 2006 2 汤子瀛主编计算机操作系统第三版)西安: 西安电子科技大学出版社,2001 3张坤等编操作系统实验教程北京: 清华大学出版社, 2008精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 24 页,共 42 页个人资料整理仅限学习使用审核批准意见系教研室)主任 签字)内蒙古工业大学课程设计论文)说明书书写规范一、说明书 论文)基本格式说明书或论文一般不应少于30005000 字。说明书 论文)手写或打印均可,手写要书写工整。1、题目:题目要对论文的内容有高度的概括性,简明、易读。2、摘要:中文在前,外文在后。中文摘要在200400 字以内。关键词35个,以分号相隔。3、目录:设计说明书 论文)目录应包括论文全部章节的标题要求编到 3级标题)和参考文献、附录可选择)、页码右对齐。4、正文:正文应按照目录所定的顺序依次撰写,要求计算准确,论述清楚、简练、通顺,插图清晰,书写整洁。文中图、表及公式应规范地绘制和书写。5、插图:插图包括曲线图,流程图,工艺图、设备图、框图,示意图,图片等。插图序号用阿拉伯数字分章依序连续编排,每一插图都应有简短确切的题名,连同图序置于图下,图序与图名之间空一格,图名中不允许使用标点符号,图名后不加标点符号。6、插表:插表序号用阿拉伯数字分章依序连续编排,每一插表都应有简短确切的题名,表序与表名书写于表的正上方,表序与表名之间空一格,表名不允许使用标点符号,表名后不加标点符号。7、参考文献:著作图书文献书写格式如下:序号 作者姓名书名出版地出版者出版年:引用部分起止页码学术刊物文献书写格式如下:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 25 页,共 42 页个人资料整理仅限学习使用序号 作者姓名文章名学术刊物名年,卷期):引用部分起止页码序号 作者姓名论文题目 学位授予单位)学位论文年序号 发明者姓名专利名称专利公开号年二、打印要求1、 纸张及页面原则上用打印机打印输出。设计说明书论文)纸张用A4 标准纸,版心尺寸为:左边距30mm,右边距 25mm,上边距 30mm,下边距 25mm。行间距为22磅,即每页 32行,每行 37字。2、字体与字号各章题序及标题为小二号黑体;各节的一级题序与标题为小三号黑体,各节的二级题序及标题为四号黑体,各节的三级题序及标题为小四号黑体,正文用小四号宋体。摘要、参考文献、等部分按章处理,即标题小二号黑体,内容小四号宋体。目录的标题采用小二号黑体,内容为小四号宋体。3、 页码设计说明书 论文)页码一律用阿拉伯数字连续编码,页码由第一章的首页开始作为第 1 页,摘要、目录等不编排页码。三、装订顺序1、封面; 见附件)2、任务书;3、中文摘要、英文摘要; 仅对论文)4、目录5、正文;6、参考文献。附件:课程设计封面精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 26 页,共 42 页个人资料整理仅限学习使用课程设计题目 : X X X学 生 姓名: X X X学院 : 信 息 工 程 学 院系别: 计 算 机 系专业: 软 件 工 程班级: 软 件 08-X指 导 教师 :X X X 副 教 授 或 讲 师 )X X X 副 教 授 。struct filename / 文件目录项结构体 char name9。 /文件名 char ext4 。 /扩展名 int i 。 /文件所占用磁盘块的第一个磁盘块号 int Amount 。 /文件所占用磁盘块的块数 long int size。 /文件大小file11 。int num。struct empty / 盘块结构体 int map11 。 /盘块位示图 int filenum 。 /文件数量emptytable 。/模块说明:void SystemInit( / 模拟磁盘文件初始化函数 for(int i=2 。i / 初始化存放位示图的盘块 emptytable.mapi=0 。 emptytable.map0=1 。 emptytable.map1=1 。 emptytable.filenum=0 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 28 页,共 42 页个人资料整理仅限学习使用FILE *fp 。if(fp=fopen(filesys,wb+=NULL /wb+:为读写建立一个新文件;打开系统文件将文件目录盘块和 / 位示图盘块写入系统文件printf(can not open file n。exit(0。 fseek(fp,512L,0 。fwrite(&emptytable,sizeof(struct empty,1,fp。fclose(fp 。printf(! 初始化系统成功! 。 void WriteFile( / 将目录以及空闲盘块表写入磁盘 FILE *fp 。if(fp=fopen(filesys,rb+=NULL printf(can not open file n。exit(0。 rewind(fp 。for(int i=0 。i fwrite(&filei,sizeof(struct filename,1,fp。 /文件目录 fseek(fp,512L,0 。fwrite(&emptytable,sizeof(struct empty,1,fp。 /位示图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 29 页,共 42 页个人资料整理仅限学习使用fclose(fp 。 void dir( / 显示文件目录 int i,j 。FILE *fp 。if(fp=fopen(filesys,rb=NULL printf(can not open file n。exit(0。 fseek(fp,512L,0 。 / 空闲盘块表的定位fread(&emptytable,sizeof(struct empty,1,fp。rewind(fp 。 / 文件目录表的定位 num=emptytable.filenum 。for(i=0 。 i fread(&filei,sizeof(struct filename,1,fp。 if (num!=0 printf( 系统文件目录结构:n 。 for(i=0,j=1 。i printf(%s.%sn,filei.name,filei.ext。 if(j=5 printf(n 。 j=1。 printf(n 文件数量为 %d ,num 。 fclose(fp 。 void type( / 显示文件内容 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 30 页,共 42 页个人资料整理仅限学习使用FILE *fp 。int i,j 。if(fp=fopen(filesys,rb=NULL printf(can not open file n。exit(0。 fseek(fp,512L,0 。 fread(&emptytable,sizeof(struct empty,1,fp。 rewind(fp 。 num=emptytable.filenum 。 for(i=0 。i fread(&filei,sizeof(struct filename,1,fp。 printf(%s.%sn,filei.name,filei.ext。 char name9,ext14 。 printf( 请输入文件名:n 。 gets(name。 /scanf(%s,name 。/getchar(。 printf( 请输入扩展名:。 gets(ext1。 /scanf(%s,ext1 。getchar(。 if(*(name+0=0 printf( 文件名不能为空 ! n 。 return。 if(*ext1=0 strcpy(ext1,txt 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 31 页,共 42 页个人资料整理仅限学习使用 int sign=0 。 for(i=0 。i if(strcmp(filei.name,name=0 & (strcmp(filei.ext,ext1=0 printf(- 找到第 %d 个文件 (从 0 开始 -n,i 。sign=1。break。 if(sign=0 printf( 无此文件 n。 return。 /显示文件 int b,m,n 。 b=filei.i 。 n=filei.size 。 printf(- 该文件位于第%d(从第 0块开始 块n,b。 printf(- 从文件读出的文件长度为:%dn-,n 。 /fseek(fp,b*512L,0 。 char cc。 /printf(- 文件内容长度为:%ldn,n 。 printf(- 文件内容为 :-n 。 for( m=0,j=1 。 m fseek(fp,b*512L+m,0 。 /fread(&cc,sizeof(char,1,fp 。 cc=fgetc(fp 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 32 页,共 42 页个人资料整理仅限学习使用 printf(%c,cc 。 if(j%80=0printf(n。 printf(n 。 fclose(fp 。 void delfile( / 删除一个文件 FILE *fp 。int i。if(fp=fopen(filesys,r=NULL printf(can not open file n。exit(0。 fseek(fp,512L,0 。fread(&emptytable,sizeof(struct empty,1,fp。rewind(fp 。num=emptytable.filenum 。for(i=0 。 i fread(&filei,sizeof(struct filename,1,fp。char name9,ext13 。printf( 请输入文件名:n 。gets(name。/scanf(%s,name 。 getchar(。printf( 请输入扩展名:n 。gets(ext1。/scanf(%s,ext1 。getchar(。if(*name=0 printf( 文件名不能为空 ! n 。 return。 if(*ext1=0 strcpy(ext1,txt。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 33 页,共 42 页个人资料整理仅限学习使用char judge。printf( 是否删除文件%s.%s y/n,name,ext1 。scanf(%c,&judge 。 getchar(。if(judge=y|(judge=Y printf( 准备删除文件%s.%s !n,name,ext1 。else if(judge=n|(judge=N return。 else printf( 系统默认放弃!n 。 return。 int sign=0 。for(i=0 。 i if(strcmp(filei.name,name=0&(strcmp(filei.ext,ext1=0 sign=1。break。 if(sign=0 printf( 文件名错 n。 return。 /回收空间int b=filei.i 。int Amount=filei.Amount。int j。for(j=0 。 j 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 34 页,共 42 页个人资料整理仅限学习使用emptytable.mapb+=0 。for( j=i 。j strcpy(filej.name,filej+1.name。 strcpy(filej.ext,filej+1.ext。 filej.i=filej+1.i。 filej.size=filej+1.size。 filej.Amount=filej+1.Amount。 emptytable.filenum=emptytable.filenum-1。 num=emptytable.filenum 。 WriteFile( 。 fclose(fp 。 void copy( / 复制一个文件 FILE *fq 。int i,j 。if(fq=fopen(filesys,rb+=NULL printf(can not open file n。 exit(0 。 fseek(fq,512l,0 。fread(&emptytable,sizeof(struct empty,1,fq。rewind(fq 。num=emptytable.filenum 。for(i=0 。 i fread(&filei,sizeof(struct filename,1,fq。char SourceName9,DestName9,ext14,ext24。printf( 请输入源文件名:。gets(SourceName。 /scanf(%s,SourceName 。getchar(。printf( 请输入源文件扩展名:。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 35 页,共 42 页个人资料整理仅限学习使用gets(ext1。 /scanf(%s,ext1 。getchar(。printf( 请输入目标文件名:。gets(DestName。 /scanf(%s,DestName 。getchar(。printf( 请输入目标扩展文件名。gets(ext2。 /scanf(%s,ext2 。getchar(。if(*ext2=0 strcmp(ext2,txt。 if(*SourceName=0 | (*DestName=0 cout=0 cout 错误 ! 两个文件名不能相等!n。return。 for(i=0 。 i if(strcmp(SourceName,filei.name=0 strcpy(filenum.name,DestName 。