欢迎来到天天文库
浏览记录
ID:18897818
大小:706.00 KB
页数:28页
时间:2018-09-26
《模拟文件管理系统》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《操作系统原理》课程设计——模拟文件管理系统一.设计说明设计实现一个简单的模拟文件管理系统,包括目录文件、普通文件、i结点和存储区,具体要求如下:(1)程序初始化时应构造如图1-1所示的目录结构。图1-1 初始目录树(2)在此模拟文件管理系统中可以实现的操作有:改变目录:cd<目录名>,工作目录转移到指定的目录下。目录不存在时,给出错误信息。创建文件:edit<文件名>,创建一个指定名字的新文件,即在目录中增加一项,不考虑文件的内容。对于重名文件给出错误信息。删除文件:del<文件名>,当没在用户使用指定文件时,将其删除。文件
2、不存在时给出错误信息。显示目录:dir<目录名>,显示指定目录下的全部文件和第一级子目录,如果没有指定目录名,则显示当前目录下的相应内容。创建目录:md<目录名>,在指定路径下创建指定的目录,如没有指定路径,则在当前目录下创建指定的目录。对于重名目录给出错误信息。删除目录:rd<目录名>,删除指定目录及其下的全部文件和子目录。如果指定目录为空,可直接删除,否则给出用户提示是否删除。其他说明:<目录名>和<文件名>都支持全路径名和相对路径名。文件名由目录结构中各级文件名分量排列构成,各分量间用“/”隔开。输入exit命令可退出此
3、模拟文件管理系统。27《操作系统原理》课程设计——模拟文件管理系统二.工作原理2.1 编译工具本程序使用的函数均为标准C库函数,可以由任何支持标准C的编译器编译运行。已经通过测试的编译环境如下:Windows平台:VisualC++6.0使用方法:用VC6打开fileSys.c文件,执行Build,根据对话框提示创建工程文件。Build完成即可用Execute运行程序。Linux平台:Gcc2.96使用方法:到fileSys.c所在路径下,执行命令gcc-ofileSysfileSys.c生成可执行文件fileSys,执行./
4、fileSys运行程序。2.2 相关说明支持相对路径和绝对路径:相对路径如“cduser/file1↙”,“dir↙”绝对路径如“cd /user/file1”(root指根目录)、“cd /user/file1↙”、“cd/↙”(表示对根目录操作)如果命令或路径出错会有详尽的提示。在新建文件或目录中,若文件名或目录名同名的文件或目录下已存在,则创建失败并给以提示。CD命令中,如果遇到路径错误,将报错,并保持在当前路径下等待下一次命令。如果有命令格式或者文件目录格式有错,系统将报错,并提示用户,允许重试。不允许对文件操作的命令
5、与对目录操作的命令混用,否则报错。本系统采用了动态分布存储空间的链表结构,所以对文件数目没有明确限制,只受系统资源制约。Exit为退出系统命令,该命令不能接目录名。在6个命令中,只有dir可接空路径名,表示对当前目录的操作,其他的将会对命令格式的错误情况报错。三.详细设计3.1程序框架及函数调用关系函数之间的关系如图3-1所示,每个函数的说明如下:Main():主函数CdComd():改变目录功能处理EditComd():创建文件功能处理DelComd():删除文件功能处理RdComd():删除目录功能处理27《操作系统原理》
6、课程设计——模拟文件管理系统Dircomd():显示目录功能处理Mdcomd():创建目录功能处理Init():初始化文件树ParseCommand():接受输入的命令并将其分解成操作名和路径文件名ExecuteCommand():执行命令,根据参数Paral,调用相应的功能处理模块;若输入命令有误,则报错图3-1 调用关系图FindPath(): 查找参数ph所指向的路径FindFileName(): 从参数para2中找到要建立或删除的子目录,文件名,并调用查找路径子函数把指针指向其父亲结点CreateFileNode()
7、:创建结点GetInput():缓冲区安全输入子函数,如果输入超过缓冲区长度,则截取前[缓冲区长度-1]位,最后一位补“/0”CheckCommand():命令检查GetDir():获取当前目录名Trim():对命令进行格式处理,即去掉空格等3.2数据结构及相应算法整个文件系统采用二叉树型存储结构,如图3-2所示27《操作系统原理》课程设计——模拟文件管理系统图3-2 初始目录树每一个结点的结构如下:StructFileNode{Charfilename[FILENAME_LEN];//文件名/目录名intisdir;//目录
8、文件识别标志inti_nlind;//文件的链接数intadr;//文件的地址StructFileNode*parent,*child;//指向父亲的指针和指向左孩子的指针StructFileNode*sibling_prev,*sibling_next;//指向前一个兄弟的
此文档下载收益归作者所有