收藏 分享(赏)

操作系统课程设计1.doc

上传人:HR专家 文档编号:11494028 上传时间:2020-05-13 格式:DOC 页数:16 大小:704.50KB
下载 相关 举报
操作系统课程设计1.doc_第1页
第1页 / 共16页
操作系统课程设计1.doc_第2页
第2页 / 共16页
操作系统课程设计1.doc_第3页
第3页 / 共16页
操作系统课程设计1.doc_第4页
第4页 / 共16页
操作系统课程设计1.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、os.采用二级目录实现文件管理操作系统原理课程设计报告题目: 采用二级目录实现文件管理 所在学院: 班 级: 学 号: 姓 名: 指导教师: 2013年1月15日 14 目 录一、 课程设计目的1二、课题内容 1三、总体路线 1四、概要设计 2 1.数据结构 2 2.所使用函数及其功能 3五、详细设计 4 1.主函数流程图 4 2.创建文件函数流程图 5 3.删除文件函数流程图 74.分解命令函数流程图 10六、测试、修改及运行结果 10七、结束语 13八、参考文献 14一、 课程设计目的 文件系统是现代OS用来存储和管理信息机构,具有按名存取的功能,不仅能方便用户对信息的使用,也有效提高了信

2、息的安全性。本课题模拟文件系统的目录结构,并在此基础上实现文件的各种操作方法。通过本课题,深入理解文件文件目录的作用和功能,掌握文件打开结构,熟悉与文件有关的系统调用,从而更好地掌握文件系统概念。二、 课题内容1文件目录采用二级目录结构,第一级为主文件目录master_file_directory;第二级为用户文件目录user_file_directory。用户名 用户文件目录地址 图1 master_file_directory 结构文件名文件保护方式文件设置长度 文件所在地址 图2 user_file_directory 结构2为加速文件存取,为每个用户建立一张用户打开表fileTable

3、,用以记录该用户当前正在使用的文件。文件名文件长度文件所在地址文件类型创建文件时间 图3 fileTable 结构 3为该系统提供6条操作命令:创建、打开、读、写、关闭、删除等。 4.在该模拟系统中,应先建立主文件目录、用户目录和用户打开文件表,然后接受合法用户,给出一个菜单,按用户选择执行相关操作。三、 总体路线1在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。在退出这个简单的文件系统时,应将该虚拟文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。 2文件存储空间的分配采用显式链接分配。为了实现创建和删除文件必须要有一棵初始的文件树存在,以便

4、在文件树的根节点下实现创建和删除文件。 3文件目录结构采用二级目录结构。为了简单起见,可以使用文件结构体,结构体内容包括:文件名,文件目录识别标示,文件链接数,以及他的左孩子右孩子左兄弟右兄弟指 4.要有分解函数对输入的命令进行分解。以识别那部分是哪部分是命令,哪部分是路径和文件名。 5.最后要有执行函数。来执行输入的创建文件命令。四、概要设计1. 数据结构(1)函数中的主要结构体/两级目录结构体typedef struct master_file_directory /主文件目录MFDchar userName10;char password10;UFD *user;MFD;MFD user

5、TableMaxUser;int used=0; /定义MFD目录中用已有的用户数typedef struct user_file_directory /用户文件目录文件UFD/char fileName10;fileTable *file;user_file_directory *next;UFD;/UFD *headFile;typedef struct fileTable /文件块结构体char fileName10;int strat; /文件在磁盘存储空间的起始地址int length; /文件内容长度int maxlength; /文件的最大长度char fileKind3; /文

6、件的属性读写方式struct tm *timeinfo;bool openFlag; /判断是否有进程打开了该文件/fileTable *next;(2)结构体相互之间的调用关系图: 图4 结构体关系图2. 模块结构(1)所用函数及其功能: void Init();/初始化文件树int ParseCommand();/接受输入的命令并把其分解成操作名和路径文件名void ExecuteCommand();/执行命令,分别执行edit,del,dir,exit命令int editComd();/处理edit命令,即创建文件,只要创建表示文件的节点即可,内容及大小不考虑int delComd();

7、/处理del命令,即删除指定文件,不存在是给出错误信息int dirComd();/处理dir命令。问了能显示的看出创建文件和删除文件是否成功,把根目录的文件都显示出来int FindFilename(char Para2);/查找文件名struct FileNode* CreateFileNode(char filename,int isdir,int i_nlink);/创建结点int GetInput(char* buffer,unsigned int buffer_len);/获取输入 (2)所使用变量struct FileNode *cp, *tp, *root;/ *cp, *tp

8、, *root是根目录节点char pathINPUT_LEN-COMMAND_LEN;/记录当前走过的路径char Para1COMMAND_LEN,Para2INPUT_LEN-COMMAND_LEN;/para1数组存储输入的命令,para2数组存储输入的文件名char filenameFILENAME_LEN,tmp;unsigned int i,j; 五、详细设计1. 主函数流程图 图5 主函数流程图2. 创建文件函数流程图 图6 创建文件函数流程图具体函数实现过程如下:int editComd() /char tmp;struct FileNode * temp=CreateFil

9、eNode(,0,0);int sign;struct FileNode *tp;/路径不能为空if(strlen(Para2)=0)printf(n命令格式有错误.n);return 0;/长度检查if(strlen(Para2)50)printf(n文件名过长n);return 0;/格式检查if (!(isalpha(Para20)|Para20=_|Para20=0|Para20=/)printf(文件名格式有错!n);/* 文件首字母可以为字母或数字或_或/或回车*/return 0;/获取文件名sign=FindFilename(Para2);if(sign=0)return 0;

10、if(cp-isdir!=1)/如当前指针指向的是文件,则报错printf(you cannot edit a file in under a file!n);return 0;/创建文件结点,并插入到指定目录下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;elsetemp=cp; /用temp

11、找到新结点插入处temp=temp-child;while(temp-sibling_next )/find the last sibing nodetemp=temp-sibling_next;if(strcmp(temp-filename,filename)=0&temp-isdir=0)printf(此文件名已存在n);/重名报错return 0;/找到了最后一个结点temp-sibling_next=tp;tp-parent=NULL;tp-child=NULL;tp-sibling_prev=temp;tp-sibling_next=NULL;return 1;3. 删除文件函数流程

12、图 图7 删除函数流程图具体函数实现过程如下:int delComd() /char tmp;int sign;struct FileNode *temp;/参数不能为空if(strlen(Para2)=0)printf(n命令格式有错误.n);return 0;/获取文件名sign=FindFilename(Para2);if(sign=0) return 0;/用temp指向要删除的结点if(cp-child) temp=cp-child;while(temp-sibling_next & (strcmp(temp-filename,filename)!=0 | temp-isdir!=0

13、)temp=temp-sibling_next;if(strcmp(temp-filename,filename)!=0)printf(不存在该文件!n);return 0;elseprintf(不存在该文件!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-sibl

14、ing_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;/ifelse/第一个孩子 if(temp-sibling_next)/处理是最后一个兄弟的情况temp-sibling_next-parent=temp-parent;temp-parent-child=temp-sibling_next;/elsefree(temp)

15、;return 1;4. 分解命令函数流程图 图8 分解命令函数流程图六、测试修改及运行结果1.实际运行结果:初始界面2.键入用户名和密码创建账号3. 登陆4. 文件操作(1)创建文件(2)写文件(3)读文件(4)显示文件(5)关闭文件(6)删除文件七、结束语虽然我们做过很多次课程设计了,但是感觉自己还有好多需要学习的地方,接到题目要求时,设计大体的框架,考虑好所使用的数据结构,然后用高级编程语言分模块的把架子的思路编写出来,调试,运行,再看看是不是符合题目的要求,上网找些资料,看看想想是不是要提高要求,才可以满足实际的需要,最后把收集的劳动成果组合起来,一个小程序终于成型了,虽然每次的过程差

16、不多都一样,但是每次都会有不同的体会。 在这中间,敲代码,调试程序的过程比较枯燥,每次思考一个问题很久不能解决的时候,真的很想放弃它,试着找客观的原因,幸好,我的周围有学习好的同学,他们不仅帮我解答了我遇到的一些当时困扰着我的问题,还给了我很多鼓励,交流了一下做程序的思想,方法,跟我谈毅力,决心,还有什么是进步,这些是平时听老师讲课所学不到的,我收获不少。 通过本次的课程设计,使我能够正确运用操作系统课程中所学的基本理论和知识,加深了对文件系统基本概念的理解,以及磁盘文件系统的文件操作。还有让我感受挺深的是对软件工程方法的应用。设计一个软件,先要做好需求分析,这一点很重要,如果没有分析好需求,

17、到软件设计的最后,发现所做的功能不符合要求,那么一切都得重做,前面所有的努力都付诸东流。还有比较重要的是,画出语境级的数据流图,以及仔细画好程流程图。在程序设计的开始,由于分析工作做得不够深入和细致,吃了点小苦头。对于这样一个小设计来说,都会吃苦头,要是大工程更是无法想像,有可能会项目失败。另外在运用C语言的时候,感觉有点生疏,在组织语言时时而出错,在编程和调试的过程中,经常会出现意想不到的问题,并非每个问题都可以从相关资料中找到解决方法,有些问题是无法预料到的,这就需要通过自己理性的分析得出问题的解决方案。 通过一周的努力,这次课程设计又要接近尾声了。虽然课设当中遇到很多问题,但是最终问题基本都一一解决了。通过这次课程设计的制作,加深了自己对文件管理系统的了解与认识。我相信,只要不断的严格要求自己,注意培养自己的思维能力,就一定会有更大更辉煌的发展和提高。八、参考文献1C程序设计(第三版)谭浩强 清华大学出版社2计算机操作系统 西安电子科技大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报