操作系统课程设计(文件系统管理).docx

上传人:王** 文档编号:939086 上传时间:2024-03-01 格式:DOCX 页数:21 大小:101.60KB
下载 相关 举报
操作系统课程设计(文件系统管理).docx_第1页
第1页 / 共21页
操作系统课程设计(文件系统管理).docx_第2页
第2页 / 共21页
操作系统课程设计(文件系统管理).docx_第3页
第3页 / 共21页
操作系统课程设计(文件系统管理).docx_第4页
第4页 / 共21页
操作系统课程设计(文件系统管理).docx_第5页
第5页 / 共21页
操作系统课程设计(文件系统管理).docx_第6页
第6页 / 共21页
操作系统课程设计(文件系统管理).docx_第7页
第7页 / 共21页
操作系统课程设计(文件系统管理).docx_第8页
第8页 / 共21页
操作系统课程设计(文件系统管理).docx_第9页
第9页 / 共21页
操作系统课程设计(文件系统管理).docx_第10页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《操作系统课程设计(文件系统管理).docx》由会员分享,可在线阅读,更多相关《操作系统课程设计(文件系统管理).docx(21页珍藏版)》请在优知文库上搜索。

1、操作系统课程设计I评定等级I文件系统管理I学院计算机学院专业计算机科学与技术班级姓名学号2013年1月8日广东工业大学计算机学院制文件系统管理一、实验目的模拟文件系统的实现的基本功能,了解文件系统的基本构造和文件系统的管理方法看,加深了解文件系统的内部功能的实现。通过高级语言编写和实现一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作系统命令的实质内容和执行过程有比较深入的了解。二、实验内容和要求编程模拟一个简单的文件系统,实现文件系统的管理和控制功能。在用户程序中通过使用文件系统提供的Creale,open,read,write,close,delete等文件命令,对文件进展操作

2、。以下报告主要包括:1 .可行性分析2 .需求分析3 .概要设计4 .详细设计5 .测试6 .总结三、可行性分析1、技术可行性对于图形编程还不了解,但是经过本学期的三次实验的练习,可以设计好命令操作界面。利用大二期间学习的数据构造可以模拟出此课程设计的要求。2、经济可行性课程设计作为本课程的练习及进一步加深理解。与经济无关,可以不考虑。(零花费,零收益)3.法律可行性自己编写的程序,仅为练习,不作其他用途,与外界没什么联系,可行。四、需求分析编写程序实现文件系统,主要有以下几点要求:1、实现无穷级目录管理及文件管理基本操作2、实现共享“别名”3、加快了文件检索五、概要设计为了抑制单级目录所存在

3、的缺点,可以为每一位用户建设一个单独的用户文件目录UFD(UserFileDirectory),这些文件目录可以具有相似的构造,它由用户所有文件的文件控制块组成。此外,在系统中再建设一个主文件目录MFD(MasterFileDirectory);在主文件目录中,每个用户目录文件都占有一个目录项,其目录项中包括用户名和指向该用户目录的指针。本设计主要实现下面几个数据构造:MDFUFDAFD用户名文件名翻开文件名攵祥目录指针保护码翻开保护码用户名文件长度读写指针文件目录指针文件名总体的流程图如下:六、详细设计主要数据构造:IMFD(MasterFileDirectory),主要用以存放用户,可以增

4、加存放密码的字符数组,本设计没有保密安全方面的忧虑,为了使用时操作更简单省去密码。所以,MFD构造仅包括用户名和指向子目录的一个指针,以及指向下一用户的连接点,为线性构造。structMFD(charname20;用户名UFD*bst_pointer;文件目录指针MFD*link;1;2 .UFD(UserFileDirectory),用于存放文件的数据构造。由于本设计为了加快检索速度,使用了二叉排序树的构造,所以UFD构造中相应参加了用于树构造的ParenI,leftchild,和rightchild记录链接情况。当本文件为普通文件时,为下级记录申请AFD(file),folder为空。同样

5、,当本文件为文件夹时,为它申请相应的空间,AFD为空。以此来到达无穷级别目录的存储。structUFDUFD *parent;UFD *leftchild;UFD *rightchild;UFD *folder;UFD *pre_fblder;AFD *file;char name30;int length;charrw;char share;char file_fblder;作为文件夹时指向下一层,文件时为空指向上一层目录(文件夹时用到)作文文件时文件的具体内容文件(夹)名字作为文件时文件的长度,默认为0读写标志1共享标志yr or wor n指示此文件是文件或文件夹,f为文件,o为文件夹1

6、;3 .AFD,存放文件的内容的构造,比较简单,文件内容用一个字符数组存储,为顺序构造,最多可存放99个字符structAFDcharafd-file100;读指针写指针intread;intwrite;1;4.REC struct REC/UFD的线性链,用于记录共享文件和已翻开文件UFD*file;REC*link;1;登陆/创立用户查看用户关键函数说明:voidLogjn();voidInit_user();voidCheCk_uSer0;以上三个函数为开场时管理用户创立和登陆的函数。开场时没有用户,需要创立后才可登陆。创立用户即自动分配一个存放用户文件的UFD,此时的UFD为空,需要后

7、续的创立文件以及文件夹的分配。UFD*oPerationS(UFD*fileBST);文件夹的操作调用用户登陆后即开场对该用户文件UFD的操作,同时,假设在文件夹中创立一个文件夹,它同样可以分配得到一个UFD,对用户文件的操作可以重复调用,以此来到达无穷级目录的操作。在里层文件的操作和外层的是一样的,但假设要退回外层文件夹就需要逐层返回,不能立即跳到某一层某地址。操作完毕后返回改变后的文件存储状态。void fcreate(UFD *fileBST);UFD *fdelete(UFD *fileBST);对文件夹的六个基本操作voidfopen(UFD*fileBST);voidfclose(

8、UFD*fileBST);voidfread-write(UFD*fileBST,charf);读写操作。按选择f=5为读6为写以上五个函数为对文件的六个基本操作,其中读文件和写文件局部代码一样,所以由一个函数完成。在Create五个函数中,分别对文件夹EeBST做了相应的处理,由于删除文件的函数可能会删除到头结点,所以需要一个返回值。voidinsertBST(UFI)*fileBST,UFD*newBST);在fileBST中插入新的结点newBSTUFD*searchBST(UFD*fiieBST,charname);在fileBST树中查找名字为name的结点并返回该结点,文件不存在那

9、么返回空voidBSTtraverse(UFD*fileBST);遍历二叉树UFD*deleteBST(UFI)*fileBST,charname30J);删除name结点,返回删除后的结点由于该设计的存储构造用到了二叉排序树,所以把相关的操作写成函数,供基本操作的函数调用。insert函数在fileBST中插入新的结点newBST;search函数在fileBST树中查找名字为name的结点并返回该结点,文件不存在那么返回空;还有traverse和delete函数对二叉排序树做了基本的操作。voidprint-path(FD*fileBST);输出当前路径voidprint_open_fil

10、e();输出已翻开的文件为了在文件系统中使用户看出路径及一些相关的状态,设置了输出文件路径的函数,路径由每个文件的构造体中pre_folder记录上一层的文件夹名字,这样逐层输出即可到达目的。每执行一次操作就输出一次已翻开的文件的具体情况,翻开的文件应及时关闭,否那么删除时会有删除失败提示。UFD*check_share(charname30J);在共享链中检查是否有name文件,有那么返回该UFD,没那么NULLvoiddel_in_share(UFD*node);在共享链中删除node结点以上两个函数为对共享文件的处理函数,当翻开或读写文件时在本层文件中未找到相应的文件时,就用CheCk_

11、share函数在共享文件中查找,如果存在就返回该文件的UFD,不存在就返回NULL,而deUkshare函数是伴随着删除文件的函数出现的,目的是为了删除文件以后不会在共享链中再存在。具体代码如下:filesysterm.hstructAFD(charafd-file100;intread;读指针intwrite;写指针1;structUFD(UFD*parent;UFD*leftchild;UFD*rightchild;UFD*folder;作为文件夹时指向下一层,文件时为空指向上一层目录(文件夹时用到)作文文件时文件的具体内容文件(夹)名字作为文件时文件的长度,默认为O读写标志ror w共享

12、标志y or n指示此文件是文件或文件夹,f为文件,0为文件夹UFD*pre_folder;AFD3fcfile;charname30;intlength;charrw;charshare;charfile_fblder;1;structMFD(用户名文件目录指针charname20;UFD*bst_pointer;MFD*link;/UFD的线性链,用于记录共享文件和己翻开文件1;structREC(UFD*file;REC*link;登陆创立用户查看用户文件夹的操作调用,user不为空时为第一层 对文件夹的六个基本操作1;voidLogjn();voidInit_user();voidCh

13、eck_user();UFD*operations(UFD*fileBST);voidfcreate(UFD*fileBST);UFD*fdelete(UFD*fileBST);voidfopen(UFD*fileBST);代码有重复,合并读写操作。按选择s=5为新文件插入到user文件树中在fileBST树中查找名字为name的结点文件不存在那么返回空遍历二叉树删除成功返回1,失败返回0输出当前路径输出已翻开的文件在共享链中检查是否有name文件,有那么voidfclose(UFD*fileBST);voidfread_write(UFD*fileBST,charf);读6为写voidins

14、ertBST(UFD*fileBST,UFD*newBST);UFD*searchBST(UFD*fileBST,charname);并返回该结点voidBSTtraverse(UFD*fileBST);UFD*deleteBST(UFD*fileBST,charnameL30);voidprint_path(UFD*fileBST);voidprint_open_file();UFD*check_share(charnamel30);在共享链中删除node结点返回UFD,没那么NULLvoiddel_in_share(UFD*node);main.cpp#include#include#includefilesystem.hMFD *mfdink=NULL;MFD *pre_user;UFD *pre_opera_folder=NULL;int folder_depth=0;REC *share.file=NULL;REC *open_file=NULL;void PrinLPath(UFD *fileBST)用户链表当前操作用户当前操作文件夹记录当前文件深度(用于辅助pre-folder的初始化)输出路径if(fileBST-pre-folder!=NULL)(print

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!