ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:129.84KB ,
资源ID:8541973      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8541973.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计文件系统管理Word文档格式.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计文件系统管理Word文档格式.docx

1、自己编写的程序,仅为练习,不作其他用途,与外界没什么联系,可行。四、需求分析编写程序实现文件系统,主要有以下几点要求:1、实现无穷级目录管理及文件管理基本操作2、实现共享“别名”3、加快了文件检索五、概要设计为了克服单级目录所存在的缺点,可以为每一位用户建立一个单独的用户文件目录UFD(User File Directory)。这些文件目录可以具有相似的结构,它由用户所有文件的文件控制块组成。此外,在系统中再建立一个主文件目录MFD (Master File Directory);在主文件目录中,每个用户目录文件都占有一个目录项,其目录项中包括用户名和指向该用户目录的指针。本设计主要实现下面几

2、个数据结构:M D F用户名文件目录指针U F D文件名保护码文件长度A F D打开文件名打开保护码读写指针总体的流程图如下:六、详细设计主要数据结构:1.MFD(Master File Directory),主要用以存放用户,可以增加存放密码的字符数组,本设计没有保密安全方面的忧虑,为了使用时操作更简单省去密码。所以,MFD结构仅包括用户名和指向子目录的一个指针,以及指向下一用户的连接点,为线性结构。struct MFD char name20; /用户名 UFD *bst_pointer; /文件目录指针 MFD *link;2. UFD(User File Directory),用于存放

3、文件的数据结构。由于本设计为了加快检索速度,使用了二叉排序树的结构,所以UFD结构中相应加入了用于树结构的parent,leftchild,和rightchild记录链接情况。当本文件为普通文件时,为下级记录申请AFD(file),folder为空。同样,当本文件为文件夹时,为它申请相应的空间,AFD为空。以此来达到无穷级别目录的存储。struct UFD UFD *parent; UFD *leftchild; UFD *rightchild; UFD *folder; /作为文件夹时指向下一层,文件时为空 UFD *pre_folder; /指向上一层目录(文件夹时用到) AFD *fil

4、e; /作文文件时文件的具体内容 char name30; /文件(夹)名字 int length; /作为文件时文件的长度,默认为0 char rw; /读写标志r or w char share; /共享标志y or n char file_folder; /指示此文件是文件或文件夹,f为文件,o为文件夹3.AFD,存放文件的内容的结构,比较简单,文件内容用一个字符数组存储,为顺序结构,最多可存放99个字符struct AFD char afd_file100; int read; /读指针 int write; /写指针4.RECstruct REC /UFD的线性链,用于记录共享文件和

5、已打开文件 UFD *file; REC *link;关键函数说明:void Log_in(); /登陆void Init_user(); /创建用户void Check_user(); /查看用户以上三个函数为开始时管理用户创建和登陆的函数。开始时没有用户,需要创建后才可登陆。创建用户即自动分配一个存放用户文件的UFD,此时的UFD为空,需要后续的创建文件以及文件夹的分配。UFD *operations(UFD *fileBST); /文件夹的操作调用用户登陆后即开始对该用户文件UFD的操作,同时,若在文件夹中创建一个文件夹,它同样可以分配得到一个UFD,对用户文件的操作可以重复调用,以此来

6、达到无穷级目录的操作。在里层文件的操作和外层的是一样的,但若要退回外层文件夹就需要逐层返回,不能立即跳到某一层某地址。操作完毕后返回改变后的文件存储状态。void fcreate(UFD *fileBST); /对文件夹的六个基本操作UFD *fdelete(UFD *fileBST);void fopen(UFD *fileBST);void fclose(UFD *fileBST);void fread_write(UFD *fileBST,char f); /读写操作。按选择f=5为读6为写以上五个函数为对文件的六个基本操作,其中读文件和写文件部分代码相同,所以由一个函数完成。在crea

7、te五个函数中,分别对文件夹fileBST做了相应的处理,由于删除文件的函数可能会删除到头结点,所以需要一个返回值。void insertBST(UFD *fileBST,UFD *newBST); /在fileBST中插入新的结点newBSTUFD *searchBST(UFD *fileBST,char name); /在fileBST树中查找名字为name的结 /点并返回该结点,文件不存在则返回空void BSTtraverse(UFD *fileBST); /遍历二叉树UFD *deleteBST(UFD *fileBST,char name30); /删除name结点,返回删除后的结

8、点由于该设计的存储结构用到了二叉排序树,所以把相关的操作写成函数,供基本操作的函数调用。insert函数在fileBST中插入新的结点newBST;search函数在fileBST树中查找名字为name的结点并返回该结点,文件不存在则返回空;还有traverse和delete函数对二叉排序树做了基本的操作。void print_path(UFD *fileBST); /输出当前路径void print_open_file(); /输出已打开的文件为了在文件系统中使用户看出路径及一些相关的状态,设置了输出文件路径的函数,路径由每个文件的结构体中pre_folder记录上一层的文件夹名字,这样逐层

9、输出即可达到目的。每执行一次操作就输出一次已打开的文件的具体情况,打开的文件应及时关闭,否则删除时会有删除失败提示。UFD *check_share(char name30); /在共享链中检查是否有name文件,有则 /返回该UFD,没则NULLvoid del_in_share(UFD *node); /在共享链中删除node结点以上两个函数为对共享文件的处理函数,当打开或读写文件时在本层文件中未找到相应的文件时,就用check_share函数在共享文件中查找,如果存在就返回该文件的UFD,不存在就返回NULL,而del_in_share函数是伴随着删除文件的函数出现的,目的是为了删除文件

10、以后不会在共享链中再存在。具体代码如下:filesysterm.h /文件夹的操作调用,user不为空时为第一层 /对文件夹的六个基本操作 /代码有重复,合并读写操作。按选择s=5为读6为写 /新文件插入到user文件树中 /在fileBST树中查找名字为name的结点并返回该结点 /文件不存在则返回空 /删除成功返回1,失败返回0 /在共享链中检查是否有name文件,有则返回UFD,没则NULLmain.cpp#include #include#includefilesystem.hMFD *mfd_link=NULL; /用户链表MFD *pre_user; /当前操作用户UFD *pre

11、_opera_folder=NULL; /当前操作文件夹int folder_depth=0; /记录当前文件深度(用于辅助pre_folder的初始化)REC *share_file=NULL;REC *open_file=NULL;void print_path(UFD *fileBST) /输出路径 if(fileBST-pre_folder!=NULL) print_path(fileBST-pre_folder); printf(/%s,fileBST-pre_folder-name); else,pre_user-void print_open_file() REC *temp;

12、int i=5; temp=open_file; while(temp! %st%dtt,temp-file-name,temp-length); if(temp-rw=r)printf(只读t); else printf(可读写tshare=y是t否t for(i=0;ilink;void BSTtraverse(UFD *fileBST) /遍历二叉树(前序遍历) UFD *left,*right;%sfile_folder=o) /输出.以区分文件夹.ttleftchild!=NULL) /递归 left=fileBST-leftchild; BSTtraverse(left);righ

13、tchild! right=fileBST-rightchild; BSTtraverse(right);UFD *searchBST(UFD *fileBST,char name30)/在fileBST树中查找名字为name的结点并返回该结点 /文件不存在则返回空 int flag; flag=strcmp(fileBST-name,name); if(flag=0) return fileBST; /查找成功 else if(flag0)leftchild=NULL) return NULL; /查找失败 searchBST(fileBST-leftchild,name); /递归调用ri

14、ghtchild=NULL) return NULL;rightchild,name);void insertBST(UFD *fileBST,UFD *newBST) /将结点newBST插入原二叉树fileBST中name,newBST- if(flagleftchild=NULL) /插入 fileBST-leftchild=newBST; newBST-parent=fileBST; insertBST(fileBST-leftchild,newBST);rightchild=NULL) /插入rightchild=newBST;rightchild,newBST); /*flag=0

15、 的情况已在创建时排除*/UFD *deleteBST(UFD *fileBST,char name30)/删除名字问name的文件结点 UFD *parent_file=NULL,*del_file=NULL; UFD *move_file=NULL,*move_file_parent; del_file=searchBST(fileBST,name); if(del_file=NULL)没有此文件,删除失败! getch(); if(del_file-strcmp(del_file-folder-name,NULL)!=0) printf(注意,本系统未能实现级联删除,请先逐个删除文件!文

16、件夹非空,删除失败!) /先在共享链中删除 del_in_share(del_file); parent_file=del_file-parent;leftchild=NULL&del_file-rightchild=NULL) /被删除结点为子叶结点 if(del_file=fileBST) /只有一个结点 strcpy(fileBST- else if(parent_file-leftchild=del_file) parent_file-leftchild=NULL; free(del_file); parent_file-rightchild=NULL; else if(del_fil

17、e-leftchild=NULL|del_file-rightchild=NULL) /被删除结点没有做孩子或右孩子leftchild=NULL) /没有左孩子 if(parent_file=NULL) /删除的为根结点 fileBST=del_file- del_file-rightchild-parent=NULL; leftchild=del_file) /右孩子接上leftchild=del_file- del_file-parent=parent_file; else /右孩子接上rightchild=del_file- else /没有右孩子leftchild-leftchild=

18、del_file) /左孩子接上 parent_file- else /左孩子接上 free(del_file); else /左右孩子都有 move_file_parent=del_file- move_file=move_file_parent- if(move_file=NULL) /被删除结点的左孩子没有右孩子 if(parent_file=NULL) /删除的为根结点 fileBST=move_file_parent;leftchild=move_file_parent;rightchild=move_file_parent; move_file_parent- while(move_file-=NULL) /寻找右边最底下的结点 move_file=move_file- move_file_parent=move_file_parent- move_file- if(move_file-parent=move_file; /右孩子的双亲也要改变parent=del_file- if(fileBS

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2