操作系统课程设计报告树型目录文件系统(Word最新版)

上传人:h**** 文档编号:179793085 上传时间:2021-04-12 格式:DOC 页数:20 大小:80KB
返回 下载 相关 举报
操作系统课程设计报告树型目录文件系统(Word最新版)_第1页
第1页 / 共20页
操作系统课程设计报告树型目录文件系统(Word最新版)_第2页
第2页 / 共20页
操作系统课程设计报告树型目录文件系统(Word最新版)_第3页
第3页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《操作系统课程设计报告树型目录文件系统(Word最新版)》由会员分享,可在线阅读,更多相关《操作系统课程设计报告树型目录文件系统(Word最新版)(20页珍藏版)》请在金锄头文库上搜索。

1、编号:时间:2021年x月x日学无止境页码:第20页 共20页操作系统课程设计报告树型目录文件系统通过整理的操作系统课程设计报告树型目录文件系统相关文档,希望对大家有所帮助,谢谢观看! 操作系统课程设计报告 题目:树型目录文件系统 学 院 计算机学院 专 业 网络工程 年级班别 班 学 号 学生姓名 指导教师 成 绩 200 7年 1月 树型目录文件系统 一、 设计思想: 本课程设计目的是实现树型目录结构文件系统,本人在实现过程中也利用二叉树, 其中每个节点都有父指针,子指针和兄弟指针,其中子指针指向该目录下的第一个子节点,而该子节点的父指针则指向它的上级目录。目录下各子节点用兄弟指针连接起来

2、。 文件夹打开是则把文件夹名称及其地址压入打开文件夹栈,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。 文件打开则把文件的名称及其父指针写到文件列表同时置文件打开标志为1,文件关闭则把文件从打开列表中删除,同时置文件打开指针为0,文件读取和写入都要检查文件是否在文件打开列表中,未打开文件不能读写,只读文件不能写,只写文件不能读。 文件夹和文件创建,文件夹和文件的创建首先检验目录是否为空,为空则把文件夹或文件连接到该目录下,不为空则把检查目录下是否有同名文件夹或文件,有则提示创建不成功,没有则把文件夹或文件连接到该目录下的最后一个子节点,作为它的兄弟节点。 文件夹和文件的删除,文件夹下没有

3、打开的文件或文件没有打开才能删除,否则删除失败,删除文件夹时利用了中序历遍来删除子树。 二、 系统结构说明 系统结构如下图: root为根结点,root下有五个用户,每个用户有自己的文件夹或文件,系统初始化时为每个用户创建一个file1文件。文件夹内容只有名称和打开标志。文件除了名称和打开标志,还有文件的访问权限,文件类型以及文件长度。其中文件的访问权限、文件类型、文件长度单独作为一个结构体,其它和文件夹结构体相同,也同用一个结构体。 打开文件列表的结构体包括文件名和文件的父节点地址,打开文件夹的栈中包括文件夹名称及其地址 三、 数据结构的说明 /普通文件的结构体 struct file ch

4、ar type; /文件类型0-文本文件 1-可执行文件 2-记录型文件 char right; /文件的权限0可读 1可写 2可读可写 int f_length; /文件长度 ; typedef struct file File; /文件夹或文件的结构体 struct FCB char kind; /kind=1为文件夹 kind=2为文件 char name20; /文件夹或文件名称 bool open; File if_file; struct FCB *parent; struct FCB *brother; struct FCB *child; ; typedef struct FC

5、B Ff; /root和fcp为全局变量 Ff *root;/根节点 Ff *fcp=null;/判断是否有拷贝文件 /打开项的结构体 typedef struct char name20;/名称 Ff *node; /指针,打开的是文件夹记录文件夹的地址,是文件记录文件的父节点地 opened; int OPFO=0; /记录文件夹打开数目,最多20 opened folderopened20;/记录文件打开文件夹 int OPFI=0; /记录文件打开数目,最多20 opened fileopened20;/记录打开文件 四、 函数清单及部分函数流程图 /函数声明/ void init()

6、;/初始化创建根节点 void initopen();/初始化打开文件列表或打开文件夹文件列表 Ff* creat(Ff *parent,char name20,char kind);/创建文件或文件夹 void delet(Ff *parent,char delname20,char kind);/删除文件文件夹 void delSub(Ff *delp); /删除子树(配合删除文件夹使用) void openfolder(Ff *parent, char name20);/打开文件夹 void openfile(Ff *parent, char name20);/打开文件 void clo

7、sefo(); /关闭文件夹 void closefile(char name20); /关闭文件 void read(Ff*parent,char name20); /读文件 void write(char name20); / 写文件 void show(); /显示初始界面 void initfile(); /初始化每个用户,为每个用户创建一个file1文件 int ishaveopen(Ff *bedel); /判断文件夹下是否有打开的文件或文件夹 void filecpy(Ff *parent,char name20);/文件复制函数 void pastefile(Ff *paren

8、t); /文件粘贴 主函数流程图: 主函数开始执行时,先初始化。初始化包括创建root根目录,创建user0user4五个用户,为每个用户创建一个file1的文件。 初始化完毕后,显示选择用户和退出系统两个操作,列出用户。选择1则进入选择用户界面,选择用户后则列出用户目录下的内容。同时显示操作界面。选择操作后,执行相应的操作。执行完毕回到选择操作界面。 创建文件夹或文件函数流程图(creat(): 创建文件或文件夹首先通过主函数选择操作来传递参数,kind1创建文件夹,kind2创建文件。文件或文件夹名称是由用户输入。文件或文件夹的父节点由folderopenedOPFO-1.node来传递。

9、 如果当前目录下由同名文件或同名文件夹则创建文件或创建文件夹不成功。 当前目录是空目录则创建的文件或文件夹是当前目录的首个子节点。Parent指针指向当前目录,当前目录的child指针指向文件或文件夹。 当前目录不为空,则把文件或文件夹连接到当前目录下最后的子节点后面,作为最后的兄弟节点。 删除文件或文件夹函数delet()的流程图: 同样删除文件或文件夹的类型参数由用户选择操作时传递。Kind=1删除文件夹,kind2删除文件。名称也由用户输入。 文件在打开列表或文件夹中有打开的文件,文件或文件夹不能删除,目录下没有该文件或文件夹删除失败,删除失败时返回相应的信息。 如果目录下有该文件或文件

10、夹,而且文件没打开,或文件夹中没有打开的文件,则删除该释放该节点或该子树。返回删除成功信息。 流程图如下: 文件打开函数及其流程图openfile(): 文件打开,只能但开当前目录下的文件,首先查找文件是否在打开文件列表中,在则返回文件已经在打开文件列表中的信息,不是,则查看当前目录有没有该文件,有则打开,同时把文件名及其父节点地址写到文件队列中,置文件打开标志为1。返回打开成功信息。 文件被打开后,返回上层目录或到别的目录下,文件不会从打开文件列表中删除。除非在文件所在的目录下执行关闭文件操作关闭此文件文件才从打开文件列表中删除。 其流程图如下: 文件删除函数说明及其流程图: 文件删除,只能

11、对当前的目录下的文件进行操作。文件不在打开队列中,关闭失败,返回提示信息。在打开列表中则关闭文件,置文件打开标志为0。 流程图如下: 文件夹打开和关闭函数说明: 文件夹打开,只能打开当前目录下的文件夹打开后,文件夹名称及其节点地址写到文件夹堆栈中(如果打开的是同一个目录,不用写打开文件夹堆栈),同时列出文件夹目录下的内容。关闭文件夹(返回上级目录)则把当前目录从打开文件夹堆栈中抛出,同时打开上级目录。 以下是打开文件夹和关闭文件夹函数源程序: 打开文件夹: void openfolder(Ff *parent, char name20) Ff *select,*beopen; if(!pare

12、nt->child) /目录为空 printf(“没有此文件!“); return; beopen=parent->child; while(beopen) /寻找要打开的文件夹 if(beopen->kind=1) if(strcmp(beopen->name,name)=0) /文件夹被找到 break; if(!beopen->brother) printf(“文件夹不存在!n“); return; beopen=beopen->brother; /while end if(!beopen->child) printf(“该文件夹是空的!n“);

13、 if(OPFO>=2) if(folderopenedOPFO-2.node=parent) if(strcmp(folderopenedOPFO-1.name,name)=0) return; folderopenedOPFO.node=beopen; strcpy(folderopenedOPFO.name,beopen->name); OPFO+; return; if(beopen->child) select=beopen->child; while(select) /列出文件夹下的内容 for(int i=0;i<3&&select;i+) printf(“%s“,select->name); if(select->kind=1) printf(“(文件夹)t“); if(select->kind=2) if(select->if_file.type=0) printf(“(文本文件 %dk)t“,select->if_file.f_length); if(select->if_file.ty

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号