操作系统课程设计论文_第1页
操作系统课程设计论文_第2页
操作系统课程设计论文_第3页
操作系统课程设计论文_第4页
操作系统课程设计论文_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

操作系统原理课程设计 院 系 计算机科学技术学院一系 班级学号 姓 名 同组成员 指导教师 2014 年 1 月 13 日 题目 模拟文件管理系统题目 模拟文件管理系统题目 模拟文件管理系统 操作系统原理课程设计任务书操作系统原理课程设计任务书 1 题目 模拟文件管理系统题目 模拟文件管理系统 二 设计要求二 设计要求 1 负责设计与实现创建目录函数 删除目录函数 显示目录函 数 创建文件函数 负责设计与实现创建结点 初始化文件 树 获取文件或目录名 改变目录函数 缓冲区安全输入子函数 负责设计与实现删除文件子函数 获取当前目录名子函数 查找路径函数 命令检查函数 分解命令子函数 执行命令函数 2 查阅相关资料 自学具体课题中涉及到的新知识 3 采用结构化 模块化程序设计方法 功能要完善 具有一定的创新 4 所设计的程序应有输入 输出 5 按要求写出课程设计报告 于设计结束后 1 周内提交 其主要内容 包括 封皮 课程设计任务书 指导教师评语与成绩 目录 概述 软件总 体设计 详细设计 软件的调试 总结 致谢 附录 带中文注释的程序清单 参考文献 总体设计总体设计应配合软件总体模块结构图来说明软件应具有的功能 详细设计详细设计应用传统或 N S 流程图和屏幕抓图说明 调试调试的叙述应配合出错场 景的抓图来说明出现了哪些错误 如何解决的 三 课程设计工作量三 课程设计工作量 一般每人的程序量在 200 行有效程序行左右 不得抄袭 四 课程设计工作计划四 课程设计工作计划 2013 年 12 月 30 日 指导教师讲解布置题目 学生根据题目准备资料 2013 年 12 月 30 日 进行总体方案设计 2013 年 12 月 31 日 2014 年 1 月 3 日 完成程序模块并通过独立编译 2014 年 1 月 4 日 1 月 6 日 将各模块集成为一完整的系统 并录入足 够数据进行调试运行 2014 年 1 月 7 日 1 月 12 日 验收 撰写课程设计报告 指导教师签章 专业主任签章 操作系统原理课程设计指导教师评语与成绩 指导教师评语 课程设计表现成绩 课程设计验收成绩 课程设计报告成绩 课程设计 总成绩 指导教师签章 2014 年 1 月 13 日 目目 录录 一 概述 1 二 总体方案设计 1 一 设计要求及流程 1 二 设计思想 2 三 详细设计 3 一 主函数流程图 3 二 edit 创建文件函数流程图 4 三 删除函数流程图 5 四 ParseCommand 分解命令函数流程图 6 四 程序的调试与运行结果说明 7 五 课程设计总结 10 六 后记 10 七 致谢 10 八 附录 11 参考文献 15 0 一 概述 在现代计算机管理中 总是把程序和数据以文件的形式存储在磁盘和磁带上 供所 有的或指定的用户使用 为此 在操作系统中必须配置文件管理机构 文件管理的主要 任务是对任务和系统文件进行管理 以方便用户使用 并保证文件的安全性 为此 文 件管理应具有对文件存储空间的管理 目录管理 文件的读写管理 以及文件的共享与 保护等功能 2 总体方案设计 一 设计要求及流程 编写一程序 模拟一个简单的文件管理系统 树型结构 目录下可以是目录 也可 以是文件 在此文件管理系统 可实现的操作有 改变目录 格式 cd 显示目录 格式 dir 创建目录 格式 md 删除目录 格式 rd 新建文件 格式 edit 删除文件 格式 del 退出文件系统 exit 1 文件系统采用二叉树型存储结构 结点结构如下 struct FileNode char filename FILENAME LEN 文件名 目录名 int isdir 目录 文件的识别标志 0 为文件 1 为目录 int i nlink 文件的链接数 int adr 文件的地址 struct FileNode parent child 指向父亲的指针和指向左孩子的指针 struct FileNode sibling prev sibling next 指向前一个兄弟的指针 和指向后一个兄弟的指针 2 目录名和文件名支持全路径名和相对路径名 路径名各分量间用 隔开 3 功能具体描述 改变目录 改变当前工作目录 目录不存在时给出出错信息 1 显示目录 显示指定目录下或当前目录下所有文件和一级目录 选做 带 s 参数的 dir 命令 显示所有子目录 创建目录 在指定路径或当前路径下创建指定目录 重名时给出错信息 删除目录 删除指定目录下所有文件和子目录 要删目录不空时 要给出提示是否 要删除 创建文件 创建指定名字的文件 只要创建表示文件的节点即可 内容及大小不考 虑 删除文件 删除指定文件 不存在时给出出错信息 退出文件系统 exit 4 总体流程 初始化文件目录 输出提示符 等待接受命令 分析键入的命令 对合法的命令 执行相应的处理程序 否则输出错误信息 继续等待新命令 直到 键入 EXIT 退出为止 2 设计思想 1 在内存中开辟一个虚拟磁盘空间作为文件存储器 在其上实现一个简单的单用 户文件系统 2 文件存储空间的分配采用显式链接分配 为了实现创建和删除文件必须要有一 棵初始的文件树存在 以便在文件树的根节点下实现创建和删除文件 3 数据结构与树结构 数据结构是计算机存储 组织数据的方式 数据结构是 指相互之间存在一种或多种特定关系的数据元素的集合 树是一种重要的非线性数据结构 直观地看 它是数据元素 在树中称为结点 按 分支关系组织起来的结构 很象自然界中的树那样 树中每个分叉点称为结点 起始结 点称为树根 任意两个结点间的连接关系称为树枝 结点下面不再有分枝称为树叶 结 点的前趋结点称为该结点的 双亲 结点的后趋结点称为该结点的 孩子 同一结点的 孩子 之间互称 兄弟 4 文件目录结构采用多级目录结构 为了简单起见 可以使用文件结构体 结构 体内容包括 文件名 文件目录识别标示 文件链接数 以及他的左孩子右孩子左兄弟 右兄弟指 5 要有分解函数对输入的命令进行分解 以识别那部分是哪部分是命令 哪部分 是路径和文件名 6 最后要有执行函数 来执行输入的创建文件命令 2 3 详细设计 1 主函数流程图 开始 初始化文件树 获取键盘输入 分解命令 执行命令 显示文件退出报错删除文件 目录 创建文件 目录 3 2 edit 创建文件函数流程图 4 3 删除函数流程图 开始 检查命令格式 获取文件名字 不存在该 文件 删除的是 目录 由用户共 享该文件 报错提示 处理删除是第一 个孩子情况 处理删除不是第 一个孩子情况 结束 5 4 ParseCommand 分解命令函数流程图 6 四 程序的调试与运行结果说明 1 显示根目录下所有文件和目录 在输入 dir 后按回车键就会显示以下结果 图 4 1 当前根目录下目录和文件 2 创建目录和文件 输入 md limingyan 按下回车键后创建了目录 limingyan 输入 edit file 按下回车键 创建了文件 file 图 4 2 创建目录 limingyan 和文件 file 7 3 删除目录和文件 输入 rd limingyan 按下回车键 删除了目录 limingyan 输入 rd file 按下回车后会 显示错误 ERROR 该命令只能删除目录 不可删除文件 在输入 del file 按下回车键 后就删除了文件 file 图 4 3 删除目录和文件 4 创建文件重名情况 在输入 edit file 按下回车后继续输入 edit file 按下回车键则会提示 此文件名已 存在 请重新输入 图 4 4 创建文件重名 8 5 改变目录 将目录 mulu 该为 limingyan 输入 cd mulu 按下回车键 再输入 md limingyan 按下回车键 最后输入 dir mulu 按下回车键后显示一下结果 图 4 5 改变目录 6 退出系统 输入 exit 按下回车键后退出系统 图 4 6 退出系统 9 5 课程设计总结 在这次课程设计中 用到了一下几个函数 他们分别有着不同的作用 int editComd 处理 edit 命令 即创建文件 只要创建表示文件的节点即可 内容 及大小不考虑 int mdComd 创建目录 int dirComd 处理 dir 命令 显示目录 int rdComd 删除目录 通过多次运行程序和反复细读程序代码 深入了解了文件管理系统 初步掌握文件 管理系统的实现方法 用高级语言编写和调试一个简单的文件系统 模拟文件管理的工 作过程 从而对各种文件操作命令的实质内容和执行过程有比较深入的了解 通过这次 课设 我再一次复习了操作系统中文件管理这一章节的内容 还有数据结构中树和二叉 树的内容 6 后记 经过两周的时间 课程设计终于完成了 他锻炼了我查阅资料 进行方案构思的 能力 在设计过程中 我按照实验要求逐步完善设计方案 较好的完成了设计任务 这次课程设计 由于理论知识的不足 再加上平时没有设计经验 一开始有些手 忙脚乱 不知从何入手 但在组员们的热情帮助下 使我顺利地完成了设计 虽然 困难很多 但是我尽了自己最大的努力去克服 然而还是难免有些疏忽和遗漏的地 方 这次课程设计对我而言是对计算机操作系统课程内容掌握情况的一次自我验证和对 以前所学的各种计算机语言的一种检验 从而有着极其重要的意义 通过这次课程设计 提高了对所学知识的综合应用能力 7 致谢 首先诚挚的感谢我的指导老师 她在忙碌的教学工作中挤出时间来指导我 帮助我 她严谨细致 一丝不苟的作风一直是我学习中的榜样 她循循善诱的教导和不 拘一格的思路给予我无尽的启迪 其次 感谢我的组长 和组员 同学 以及陪伴在我身边的同学和朋友 感谢 他们为我提出的有益的建议和意见 有了他们的支持 鼓励和帮助 我才能顺利地做完 这次课程设计 最后 真心感谢老师的指导和组员的积极配合与帮助 在这次课设中 大家都作出 了很大的努力 感谢老师和我的组员们 希望大家在新的一年里万事如意 天天开心 10 8 附录 include include include include include define FILENAME LEN 21 define INPUT LEN 81 define COMMAND LEN 11 using namespace std void Init 初始化文件树 int ParseCommand 接受输入的命令并把其分解成操作名和路径文件名 void ExecuteCommand 执行命令 int cdComd 处理cd命令 int editComd 处理edit命令 int delComd 处理del命令 int dirComd 处理dir命令 int mdComd 处理md命令 int rdComd 处理rd命令 int FindPath char ph 寻找参数ph所指向的路径 int FindFilename char Para2 从参数Para2中找到要建立或删除的文件 目录名 并把指针只想其父亲 结点 struct FileNode CreateFileNode char filename int isdir int i nlink 创建结点 int GetInput char buffer unsigned int buffer len 获取输入 int CheckCommand 命令检查 int GetDir int begin char path char curDir 获取路径 struct FileNode cp tp root char path INPUT LEN COMMAND LEN 记录当前走过的路径 char Para1 COMMAND LEN Para2 INPUT LEN COMMAND LEN char curpath INPUT LEN COMMAND LEN tmppath INPUT LEN COMMAND LEN char filename FILENAME LEN tmp unsigned int i j int i j struct FileNode 结点结构 char filename FILENAME LEN 文件名 目录名 11 int isdir 目录文件识别标志 int i nlink 文件的链接数 struct FileNode parent child 指向父亲的指针和指向左孩子的指针 struct FileNode sibling prev sibling next 指向前一个兄弟的指针和指向后一个兄弟的指针 创建结点 struct FileNode CreateFileNode char filename int isdir int i nlink struct FileNode node struct FileNode malloc sizeof struct FileNode 申请结点空间 相应内容赋初值 strcpy node filename filename node isdir isdir node i nlink i nlink node parent NULL node child NULL node sibling prev NULL node sibling next NULL return node 初始化文件树 void Init struct FileNode binNode usrNode unixNode etcNode libNode userNode binNode2 liuNode sunNode ftiNode strcpy path 根目录写入当前路径 创建文件树的结点 binNode CreateFileNode bin 1 0 usrNode CreateFileNode usr 1 0 unixNode CreateFileNode unix 0 0 etcNode CreateFileNode etc 1 0 libNode CreateFileNode lib 1 0 userNode CreateFileNode user 1 0 binNode2 CreateFileNode bin 1 0 liuNode CreateFileNode liu 1 0 sunNode CreateFileNode sun 1 0 ftiNode CreateFileNode fti 1 0 cp tp root CreateFileNode 1 0 结点相应内容赋值 12 root parent NULL root child binNode root sibling prev root sibling next NULL binNode parent root binNode child NULL binNode sibling prev NULL binNode sibling next usrNode usrNode parent NULL usrNode child libNode usrNode sibling prev binNode usrNode sibling next unixNode unixNode parent NULL unixNode child NULL unixNode sibling prev usrNode unixNode sibling next etcNode etcNode parent NULL etcNode child NULL etcNode sibling prev unixNode etcNode sibling next NULL libNode parent usrNode libNode child liuNode libNode sibling prev NULL libNode sibling next userNode userNode parent NULL userNode child NULL userNode sibling prev libNode userNode sibling next binNode2 binNode2 parent NULL binNode2 child NULL binNode2 sibling prev userNode binNode2 sibling next NULL 13 liuNode parent libNode liuNode child NULL liuNode sibling prev NULL liuNode sibling next sunNode sunNode parent NULL sunNode child NULL sunNode sibling prev liuNode sunNode sibling next ftiNode ftiNode parent NULL ftiNode child NULL ftiNode sibling prev sunNode ftiNode sibling next NULL 获取文件或目录名 并把指针指向其父亲结点 int FindFilename char Para2 i strlen Para2 1 j 0 while Para2 i i j filename j 0 获得逆序的文件或目录名 存入filename中 if i 0 Para2 i 1 0 else Para2 i 0 j for i 0 i0 查找路径 int sign FindPath Para2 if sign 0 return 0 return 1 14 缓冲区安全输入子函数 如果输入超过buffer len 则截取前buffer len 1长度的输入 buffer len处字符用 0 代替 int GetInput char buffer unsigned int buffer len unsigned int count 0 while countsibling prev cp cp sibling prev if cp parent cp cp parent 找到父亲结点 else return 0 对当前路径进行相应处理 i strlen path while path i if i 0 path i 0 else path i 1 0 15 else FindPath Para2 查找路径 return 1 创建目录函数 int mdComd struct FileNode temp tp temp CreateFileNode 1 0 int sign if strlen Para2 0 参数不能为空 printf n命令格式有错误 n return 0 if strlen Para2 20 长度检查 printf n目录名过长 n return 0 格式检查 if isalpha Para2 0 Para2 0 Para2 0 0 Para2 0 printf 目录名格式有错 n 目录首字母可以为 字母 或 数字 或 return 0 sign FindFilename Para2 获取目录名 if sign 0 return 0 if cp isdir 1 如当前指针指向的是文件 则报错 printf you cannot edit a directory in under a file n return 0 tp CreateFileNode filename 1 0 创建目录结点 并插入到指定目录下 if cp child NULL tp parent cp tp child NULL cp child tp tp sibling prev NULL tp sibling next NULL 16 else temp cp 用temp找到新结点插入处 temp temp child while temp sibling next find the last sibing node temp temp sibling next if strcmp temp filename filename 0 重名报错 return 0 找到了最后一个结点 temp sibling next tp tp parent NULL tp child NULL tp sibling prev temp tp sibling next NULL return 1 删除目录函数 int rdComd int sign struct FileNode temp char cmd 2 if CheckCommand 命令检查 return 0 sign FindFilename Para2 获取目录名 if sign 0 return 0 if cp child 用temp指向要删除的结点 temp cp child while temp sibling next if strcmp temp filename filename 0 printf 不存在该目录 n return 0 else printf 不存在该目录 n 17 return 0 if temp isdir 1 要删除的不能是文件 printf ERROR 该命令只能删除目录 不可删除文件 n return 0 if temp child 如仍有用户使用该目录 则不能删除 printf n该目录不为空 您确定要删除吗 Y N n GetInput cmd 2 if strcmp cmd n 0 strcmp cmd N 0 return 0 删除工作 if temp parent NULL 不是第一个孩子 temp sibling prev sibling next temp sibling next if temp sibling next 处理是最后一个兄弟的情况 temp sibling next sibling prev temp sibling prev temp sibling prev temp sibling next NULL if else 第一个孩子 if temp sibling next 处理是最后一个兄弟的情况 temp sibling next parent temp parent temp parent child temp sibling next free temp return 1 显示目录子函数 int dirComd if strlen Para2 0 int sign FindPath Para2 查找路径 if sign 0 return 0 else printf n s path if cp root printf s n if cp child NULL 指定目录为空 18 return 0 tp cp tp tp child 指定目录不为空 显示其所有子目录及文件名 while tp if tp isdir printf s n tp filename else printf s n tp filename tp tp sibling next return 0 创建文件函数 int editComd struct FileNode temp CreateFileNode 0 0 int sign struct FileNode tp if strlen Para2 0 路径不能为空 printf n命令格式有错误 n return 0 if strlen Para2 20 长度检查 printf n文件名过长 n return 0 格式检查 if isalpha Para2 0 Para2 0 Para2 0 0 Para2 0 printf 文件名格式有错 n 文件首字母可以为 字母 或 数字 或 或 或 回车 return 0 sign FindFilename Para2 获取文件名 if sign 0 return 0 if cp isdir 1 如当前指针指向的是文件 则报错 printf you cannot edit a file in under a file n return 0 创建文件结点 并插入到指定目录下 19 tp CreateFileNode 1 0 strcpy tp filename filename tp isdir 0 tp i nlink 0 if cp child NULL tp parent cp tp child NULL cp child tp tp sibling prev NULL tp sibling next NULL else temp cp temp temp child 用temp找到新结点插入处 while temp sibling next find the last sibing node temp temp sibling next if strcmp temp filename filename 0 重名报错 return 0 找到了最后一个结点 temp sibling next tp tp parent NULL tp child NULL tp sibling prev temp tp sibling next NULL return 1 删除文件子函数 int delComd int sign struct FileNode temp if strlen Para2 0 参数不能为空 printf n命令格式有错误 n return 0 sign FindFilename Para2 获取文件名 20 if sign 0 return 0 if cp child 用temp指向要删除的结点 temp cp child while temp sibling next if strcmp temp filename filename 0 printf 不存在该文件 n return 0 else printf 不存在该文件 n return 0 if temp isdir 0 要删除的不能是目录 printf ERROR 该命令只能删除文件 不可删除目录 n return 0 if temp i nlink 0 如仍有用户使用该文件 则不能删除 printf 还有用户共享了该文件 不能删除 n return 0 删除工作 if temp parent NULL 不是第一个孩子 temp sibling prev sibling next temp sibling next if temp sibling next 处理是最后一个兄弟的情况 temp sibling next sibling prev temp sibling prev temp sibling prev temp sibling next NULL else 第一个孩子 if temp sibling next 处理是最后一个兄弟的情况 temp sibling next parent temp parent temp parent child temp sibling next free temp return 1 获取当前目录名子函数 21 int GetDir int begin char path char curDir int i 0 int len strlen path while path begin path begin i 滤过 strcpy path else if cp NULL if cp 指针指向当前目录的左孩子 else printf 路径错误 n return 0 22 while ichild i 略过 if cp isdir cp cp child 继续查找下级目录 else printf 路径错误 n return 0 strcat path while ph i if strcmp cp filename curpath 0 if cp isdir 0 strcpy path oldpat

温馨提示

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

评论

0/150

提交评论