模拟文件系统实验报告_第1页
模拟文件系统实验报告_第2页
模拟文件系统实验报告_第3页
模拟文件系统实验报告_第4页
模拟文件系统实验报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

----------------------------------------------------------------------------------------------------------------删除、重命名、文件和目录、文件的拷贝。1.设计和实现一个简单的文件系统,要求包括目录、普通文件和文件的存储b)目录的显示(列表)c)文件的添加、删除、重命名d)文件和目录的拷贝个命令+?时显示该条命令的使用说明本模拟系统通过一个大小固定的数组要代表物理盘块,假设共有1024块,新增目录占他数字均代表该物理盘块被占用,其中-3代表是占用文件的末结点,其他整数代表是文件内容的下一个寻址下标,另有一个string类型的数组来存储内容,模拟文件写入了对应下根,目录下的第一个文件或目录存在根的子节点,目录下的其他文件或目录存在第一个文件或目录的兄弟节点,以此类推。本程序仅seperate()函数使用现成代码,此函数功能为将输入命令串分离,仅仅起到1)能实现动态增长,即当输入文件的内容大小大于分配的模拟物理盘块时系统能够新的物理盘块中,若超出模拟磁盘大小,则超出部分不保存且返回提示。2)能实现级联删除,即当删除目录(文件夹)时,目录下的所有内容也应当删除并正确释放物理盘块空间。--------------------------------------------------------3)能实现目录的复制,即复制目录时(文件夹)时,该目录下的所有文件和目录也应准确复制至目标目录中,并正确分配物理盘块空间。1)主要函数定义#defineshow_bnum20//显示物理盘块的块数#defineblock_size1024//物理盘块块数intblockblocksize//假设有block_size块物理盘块stringcontent[block_size];//存放文件内容intMsize此处为模拟磁盘大小为输入5个字符fnode*root=newfnode("WP:",0,0);//设置根目录fnode*current_path=newfnode();//当前路径fnode*seek_flag=newfnode();//作为查找标志fnode*cp_flag=newfnode();//作为复制的位置标志voidinitialize();//初始化intseekTarget(stringname);//搜索文件或目录intseek_log(stringname);//搜索目录voiddelete_node(stringname);//删除节点intfreeblock(fnode*);//释放物理盘块intseekfreeblock();//搜索可用物理盘块voidshow_current_path();//显示当前路径voidadd_file(stringname,intt);//增加目录、文件voidshow_curpath_all();//显示当前目录下的所有文件voidrename_file(stringOname,stringNname);//重命名voidseperate();//分离命令voidcd();//进入目录voidadd_File();//增加文件功能入口voidadd_Log();//增加目录功能入口voiddelete_file();//删除文件或目录功能入口voidshow_memory();//显示物理盘块占用情况voidre_name();//重命名功能入口voidhelp();//查看帮助voidshow_content();//查看文件内容voidwrite_file();//写文件voidClear//清屏voidExit();//退出voidcp();//复制功能入口voidcp_log(fnode*target,fnode*source);//复制目录voidcp_file(fnode*target,fnode*source);//复制文件voidcp_node(fnode*target,fnode*source);//复制节点intfind_target_log();//找到复制的目标目录intcalculate_logsizeMain(fnode*);//计算目录大小intcalculate_logsize(fnode*);classfnode{public:stringfilename;efnode*parent;fnode*child;fnode*brother;intblock_num;tisBro是tisCld是fnode(){type=-1;parent=NULL;child=NULL;brother=NULL;block_num=-1;//文件名//父节点//子节点//兄弟节点//表示占用的物理盘块块号//初始化}fnode(stringn,intt,intb)//根节点初始化{typet;filename=n;parent=NULL;child=NULL;brother=NULL;block_num=b;block[block_num]=-3;}fnode(fnode*p,stringname,intt,intb)//文件节点初始化{parent=p;filename=name;typet;child=NULL;brother=NULL;block_num=b;block[block_num]=-3;}voidcopy(fnode*cp){filename=cp->filename;type=cp->type;parent=cp->parent;child=cp->child;brother=cp->brother;block_num=cp->block_num;}//拷贝函数命令命令解释deldel命令可以在当前目录下删除一个已存在的文件或目录(支持级联式:del+namerennamenewnametwrt+name+content--------------------------------------------------------、关键技术流程图及说明提示:若图中文字无法看清,可用MicorsoftVisio打开压缩包下“部分程序流程图”文件夹的绘图文件查看。1.增加文件或目录(此功能比较简单,流程图写的较详细就不做说明):--------------------------------------------------------2.删除目录(实现级联删除):ock3.将内容写入文件(实现动态增长):块数,内层循环为Msize,用string累加字符串内容,内层循环退出后新申请一个空间并模拟存储内容)----------------------------------------------------------------------------------------------------------------数组中,直至退出外层循环。调用函数(因为目录的内容存于目录的子节点,与兄弟节点无关),第二个函数就是递归调----------------------------------------------------------------------------------------------------------------(复制之前同样进行了路径的判误操作,内存大小的判断操作,是否重名的判断操作,界面展示说明:创建了目录log1,在log1中创建一系列文件和目录,磁盘使用情况显示已分说明:此处为了实验方便,将磁盘大小限定为5,每块磁盘输入的字符数限2,输入的----------------------------------------------------------------------------------------------------------------的空间(此处证明删除是可靠的),图中显示目录c中确实成功复制了目录b及目录下的所echoaWPamdb录(WP:)下创建了目录b,-99,代表成功删除a并释放磁盘空间(-99代表磁盘空间空闲可用),dir显示根目录WP:下所有文件和目录,显示只有newname,则证

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论