2022年操作系统试验——模拟文件管理系统 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年操作系统试验——模拟文件管理系统 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统试验——模拟文件管理系统 .pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、模拟文件管理系统一、实验内容1.基本要求:编写一程序,模拟一个简单的文件管理系统。树型结构,目录下可以是目录,也可以是文件。在此文件管理系统,可实现的操作有:改变目录:格式: cd 显示目录:格式: dir 创建目录:格式: md 删除目录:格式: rd 新建文件:格式: edit 删除文件:格式: del 退出文件系统: exit 2.目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/ ”隔开3.功能具体描述:改变目录:改变当前工作目录,目录不存在是给出出错信息显示目录:显示指定目录下或当前目录下所有文件和一级目录(选做:带/s参数的 dir 命令,显示所有子目录)创建目录:在指定
2、路径或当前路径下创建指定目录。重名时给出出错信息。删除目录:删除指定目录下所有文件和子目录。要删目录不空时, 要给出提示是否要删除。创建文件:创建指定名字的文件, 只要创建表示文件的节点即可,内容及大小不考虑。删除文件:删除指定文件,不存在时给出出错信息。退出文件系统: exit 4.总体流程:初始化文件目录输出提示符,等待接受命令,分析键入的命令;对合法的命令,执行相应的处理程序, 否则输出错误信息, 继续等待新命令。直到键入 exit退出为止。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
3、- - 第 1 页,共 13 页 - - - - - - - - - 二、数据结构设计Struct FileNode Char filenameFILENAME_LEN;/文件名 / 目录名Int isdir ;/目录、文件的识别标志Int i_nlink;/文件链接数Int adr;/文件的地址Struct FileNode *parent,*child;/指向父亲的指针和左孩子的指针Struct FileNode *sibling_prev,*sibling_next;/指向前一个兄弟的指针和后一个兄弟的指针。 三、算法设计3.1 功能模块图名师资料总结 - - -精品资料欢迎下载 - -
4、 - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 13 页 - - - - - - - - - 3.2 算法思路3.2.1 实现方法 bool spile(char *str,char *cmdstr,char *filestr);/切割字符串 bool shell(char *str); /用来解释命令 bool errorp(int id); / 打印错误提示 bool boot(); / 启动初始化 filenode* find(char *str,filenode *_root); / 递归对目录树进行查找 bo
5、ol cdexc(char *str); / 执行 cd 命令 bool direxc(char *str); / 执行 dir命令 bool mdexc(char *str); / 执行 md命令 bool editexc(char *str); / 执行 edit命令 bool delexc(char *str,filenode *fcur,bool mode,bool dir); / 执行 del 命令 bool exitexc(); / 退出 filenode* createnode(char *str,bool _isdir,int _adr,filenode *_par);/新建对
6、象节点函数调用图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 13 页 - - - - - - - - - 3.2.2 设计思想建立一刻目录树,根据输入的命令字符串,对该目录树进行增删等操作。(1)定义全局变量filenode *cur=NULL; / 指向当前目录节点filenode *root=NULL; / 指向根节点目录节点char *shellstr7=cd,dir,md,rd,edit,del,exit;/命令字符串int shelllen=7; / 命令的
7、字符串的长度(2)主函数模块调用 boot 模块初始化,然后使用while循环,每次循环中用户可以输入命令字符串,调用shell模块进行解释并执行操作,执行完成后再次进入循环,直到用户使用 exit退出。(3)其他模块说明(用文字描述,不要代码)删除模块:调用find函数查找到目录节点,然后进行删除节点操作,并注意特殊情况。新建目录 / 文件模块:通过调用find 查找是否重复,若不重复就进行增加节点。切换目录模块:通过find 函数找到节点,然后将cur 指针指向该节点。显示目录模块:通过find 函数找到节点,循环遍历该节点显示。退出模块:执行 exit函数。名师资料总结 - - -精品资
8、料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 13 页 - - - - - - - - - 代码:#include #include #include #define FILENAME_LEN 256 #define SHELL_LEN 5 typedef enumfalse,true bool; char *shellstr7=cd,dir,md,rd,edit,del,exit; int shelllen=7; /命令的字符串的长度typedef struct filenode_i /文件节点c
9、har filenameFILENAME_LEN; /文件名bool isdir; /是否目录int i_nlink; /文件连接数int adr; /文件地址struct filenode_i *par; /指向父节点struct filenode_i *chi; /指向第一个孩子节点struct filenode_i *pre; /指向上一个兄弟节点struct filenode_i *nex; /指向下一个兄弟节点filenode; filenode *cur=NULL; /指向当前目录filenode *root=NULL; /指向根节点目录bool spile(char *str,c
10、har *cmdstr,char *filestr);/切割字符串bool shell(char *str); /用来解释命令bool errorp(int id); /打印错误提示bool boot(); /启动初始化filenode* find(char *str,filenode *_root); /递归对目录树进行查找bool cdexc(char *str); /执行 cd 命令bool direxc(char *str); /执行 dir 命令bool mdexc(char *str); /执行 md 命令bool editexc(char *str); /执行 edit 命令bo
11、ol delexc(char *str,filenode *fcur,bool mode,bool dir); /执行 del 命令bool exitexc(); /退出filenode* createnode(char *str,bool _isdir,int _adr,filenode *_par); main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 13 页 - - - - - - - - - char inputsFILENAME_LEN=; boot
12、(); errorp(6); while(1) printf(n); gets(inputs); shell(inputs); /下面进行函数的实现/ /* /test / test() /这是用来对目录进行测试,在一开始建立目录结构/ filenode *p=createnode(hello,false,0,root); / filenode *p2=NULL; / root-i_nlink=2; / root-chi=p;p-par=root; / p2=createnode(hello2,true,0,root); / p-nex=p2;p2-par=root;p2-pre=p; / p
13、2-i_nlink=2; / p=createnode(hello2_1,true,0,p2); / p2-chi=p;p-par=p2; / p2=createnode(hello2_2,false,0,p-par); / p-nex=p2;p2-par=p-par;p2-pre=p; / bool spile(char *str,char *cmdstr,char *filestr) char strcloFILENAME_LEN=; char *p=NULL; strcpy(strclo,str); p=strtok(strclo, ); /调用的 strok 进行分割if(p=NULL
14、) return false; strcpy(cmdstr,p); p=strtok(NULL, ); strcpy(filestr,p); return true; / bool shell(char *str) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 13 页 - - - - - - - - - int re=-1; int i; char cmdstrSHELL_LEN=; char filestrFILENAME_LEN=; if(strstr(str,
15、)!=NULL) if(!spile(str,cmdstr,filestr) printf(输入错误! );return false; else strcpy(cmdstr,str); for(i=0;i!=shelllen;i+) if(strcmp(cmdstr,shellstri)=0) re=i; switch(re) /根据解释的命令执行对应的操作case 0: cdexc(filestr);break; case 1: direxc(filestr);break; case 2: if(strlen(filestr)=0) errorp(3);return false;mdexc(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统试验模拟文件管理系统 2022 操作系统 试验 模拟 文件 管理 系统
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内