文档详情

操作系统课程设计--树型目录文件系统.doc

发布:2018-05-11约8.4千字共17页下载文档
文本预览下载声明
树型目录文件系统 设计思想: 本课程设计目的是实现树型目录结构文件系统,本人在实现过程中也利用二叉树, 其中每个节点都有父指针,子指针和兄弟指针,其中子指针指向该目录下的第一个子节点,而该子节点的父指针则指向它的上级目录。目录下各子节点用兄弟指针连接起来。 文件夹打开是则把文件夹名称及其地址压入打开文件夹栈,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。 文件打开则把文件的名称及其父指针写到文件列表同时置文件打开标志为1,文件关闭则把文件从打开列表中删除,同时置文件打开指针为0,文件读取和写入都要检查文件是否在文件打开列表中,未打开文件不能读写,只读文件不能写,只写文件不能读。 文件夹和文件创建,文件夹和文件的创建首先检验目录是否为空,为空则把文件夹或文件连接到该目录下,不为空则把检查目录下是否有同名文件夹或文件,有则提示创建不成功,没有则把文件夹或文件连接到该目录下的最后一个子节点,作为它的兄弟节点。 文件夹和文件的删除,文件夹下没有打开的文件或文件没有打开才能删除,否则删除失败,删除文件夹时利用了中序历遍来删除子树。 系统结构说明 系统结构如下图: root为根结点,root下有五个用户,每个用户有自己的文件夹或文件,系统初始化时为每个用户创建一个file1文件。文件夹内容只有名称和打开标志。文件除了名称和打开标志,还有文件的访问权限,文件类型以及文件长度。其中文件的访问权限、文件类型、文件长度单独作为一个结构体,其它和文件夹结构体相同,也同用一个结构体。 打开文件列表的结构体包括文件名和文件的父节点地址,打开文件夹的栈中包括文件夹名称及其地址 数据结构的说明struct file{ char 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 name[20]; //文件夹或文件名称 bool open; File if_file; struct FCB *parent; struct FCB *brother; struct FCB *child; }; typedef struct FCB Ff; //root和fcp为全局变量 Ff *root;//根节点 Ff *fcp=null;//判断是否有拷贝文件 //打开项的结构体 typedef struct{ char name[20];//名称 Ff *node; //指针,打开的是文件夹记录文件夹的地址,是文件记录文件的父节点地 }opened; int OPFO=0; //记录文件夹打开数目,最多20 opened folderopened[20];//记录文件打开文件夹 int OPFI=0; //记录文件打开数目,最多20 opened fileopened[20];//记录打开文件 函数清单及部分函数流程图 //函数声明///////////////////////////// void init();//初始化创建根节点 void initopen();//初始化打开文件列表或打开文件夹文件列表 Ff* creat(Ff *parent,char name[20],char kind);//创建文件或文件夹 void delet(Ff *parent,char delname[20],char kind);//删除文件文件夹 void delSub(Ff *delp); //删除子树(配合删除文件夹使用) void openfolder(Ff *parent, char name[20]);//打开文件夹 void openfile(Ff *parent, char name[20]);//打开文件 void closefo(); //关闭文件夹 void closefile(char name[20]); //关闭文件 void read(Ff*parent,char name[20]); //读文件 void write(char name[20]); // 写文件 void show(); //显示初始界面 voi
显示全部
相似文档