模拟UNIX(linux)文件系统_第1页
模拟UNIX(linux)文件系统_第2页
模拟UNIX(linux)文件系统_第3页
模拟UNIX(linux)文件系统_第4页
模拟UNIX(linux)文件系统_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

实验内容一、[问题描述]概要设计磁盘块物理模型如下存放文件内容,为程序也存放在此处。0kb(超级块信息)文件则是指具有文件名的若干相关元素的集合。文件属性主要如下文件名:实现了按名存取,文件名和目录文件允许重名。此次UNIX文件系统最简单的目录结构。整个文件系统中只AB存储空间的分配与回收详细设计和编码};{{{};};//当前可用盘快所在组记录的盘快号//可用索引节点栈//索引节点栈指针//当前目录所在的磁盘号//当前目录节点系统调用原型入口、出口参数说明arr[51]数组赋值,在成组链接初始化时使用往磁盘中写入短数组重构BWrite,实现一个数组的写入,数组长度不确定boolIsDir(INode*iN从磁盘中读出数组从磁盘中读出数组,成组链接多级索引使用写入一个目录项所在磁盘号分配一个空闲的目录快判断一个文件是否存在判断一个文件是一个普通文件判断一个文件是一个索引文件将当前目录项插入到内存中目录项中打开一个文件,显示文件信息删除索引中一项回收一块空余磁盘片Init()明点并初始化超级栈初始化索引栈成组链接初始化间存在文件,并分配iNOde节点和磁盘空间创建一个文件在当前目录创建一个子目录息删除一个文件删除一个目录显示目录项的内容退出,并销毁资源打印版权信息提示信息打印作者信息初始化磁盘输入命令显示:命令错误有新建文件新建目录打开文件删除文件删除目录显示目录初始化命令——format空间整体假想成一个独立硬盘,我们将在这张封闭的磁盘上进行各种关于文件的操3、建立文件——mffilename获得文件名获得文件名获得文件长度合法性检查分配目录项分配磁盘空间分配索引节点4、建立子目录——mdfilename建立一个文件夹的过程和上述的建立文件非常相似,也要判断重名,也要判断是否盘块获得目录名读取目录节点合法性检查分配磁盘空间分配目录项检查当前目录有显示:不存在该文件,打开失败文件属性与操作类型相否显示:文件类型不匹配显示文件信息盘快信息无是6、删除文件——delfilename查该用目录表currDir是显示:文件已撤消文件类型匹否释放磁盘节点currDir中清除该文件的登记栏是归还文件所占的存储区域删除文件同创建文件都是非常复杂的操作,要有多种情况需要考虑。要想成功删除一个文件,首先需要判断在同级目录下是否有该文件名,然后在根据该文件为几级索7、删除目录——rdfilename就如同建立目录好似建立文件的一种特殊情况,删除目录也和删除文件差不多,但是有一点是绝对不同的,要特别注意。当子目录下建立了文件或者文件夹时,即表示子目录不为空,那么系统本身为了保持数据的完整性,是不对该目录进行删除操作的,而提示用户该目录不为空。除非用户删除了该目录下的全部文件后,返回到根目录,此时子目录为空,才允许系统删除该文件夹。删除时的具体过程同删除0级索引文件极为相似,这里就不作过多说明。文件流程如删除文件,此处不再赘述。Dir是一个很容易实现的命令,在目录下输读取当前目录显示文件信息否显示完所有否是不要小看了这条指令,它可以帮你完成许多被你遗忘的操作,由于此次代码编写超结束工作考虑不周全,为了提高数据的可靠性与完整性,建议退出系统时用此命令,它//i节点结构信息};{};};//当前可用盘快所在组记录的盘快号//可用索引节点栈//可用索引节点栈//索引节点栈指针//当前目录所在的磁盘号//当前目录所在的磁盘号//函数描述:创建20M磁盘//入口参数:无{//打开文件if(f==NULL){}fprintf(f,"%c",'0');//关闭文件}//函数描述:数组赋值//入口参数:无{}//函数描述:数组赋值//入口参数:无/*if(f==NULL){}//设置文件指针}*///函数描述:重构BWrite,实现一个数组的写入//入口参数:无if(f==NULL){}//设置文件指针}//函数描述:重构BWrite,实现一个数组的写入,数组长度不确定//入口参数:无if(f==NULL){}//设置文件指针}//函数描述:重构BWrite,实现一个数组的写入//入口参数:无if(f==NULL){}//设置文件指针fprintf(f,"%d",arr[i]);}//函数描述:从磁盘中读出数组//入口参数:无if(f==NULL){}//设置文件指针fscanf(f,"%d",&arr[i]);}//函数描述:从磁盘中读出iNode节点//入口参数:无if(f==NULL){}//设置文件指针}}//函数描述:从磁盘中读出数组//入口参数:无if(f==NULL){}//设置文件指针}//函数描述:从磁盘中读出数组,放入到iNOde中//入口参数:无if(f==NULL){}//设置文件指针}//函数描述:写入一个目录项//入口参数:无if(f==NULL){}//设置文件指针for(inti=0;i<64;i++){fprintf(f,"%hd",currDir->childItem[i].i_BNum}}//函数描述:写入一个iNode//入口参数:无if(f==NULL){}//设置文件指针}//函数描述:分配一个空闲的普通快//入口参数:无if(SS[0]>1){if(SS[1]==0){}if(temp==0){}}}//函数描述:分配一个空闲的目录快//入口参数:无}}}//函数描述:创建一个文件节点,并分配INOde和磁盘空间//入口参数:无if(fielSpec==DIR){for(inti=0;i<64;i++){}/*//为文件分配磁盘空间*/}//函数描述:初始化//入口参数:无}//函数描述:初始化索引栈//入口参数:无voidInit(){for(inti=0;i<30;i++)//可用索引节点栈//可用索引节点栈//索引节点栈指针}//函数描述:成组链接初始化//入口参数:无voidLinkdisk(){//临时空闲栈}}//函数描述:判断一个文件是否存在//入口参数:无for(inti=0;i<64;i++){}}//函数描述:判断一个文件是一个普通文件//入口参数:无}//函数描述:判断一个文件是一个普通文件//入口参数:无}//函数描述:创建一个iNode,并分配磁盘空间//入口参数:无BWrite(dirChild,dir[512-i])未实现//为目录磁盘,分配目录节点if(fileSpec==DIR){}//根据文件长度分配文件磁盘节点//直接寻址while(left&&i){left--;i--;}if(left>0){//一级索引while(left&&i){i--;left--;}if(i!=0)dir[512-i+1]=-1;//标志文件结束if(left>0){//二级索引while(left&&k){while(left&&j){//二级索引二次寻址left--;j--;}if(j!=0)//标志二级索引二次寻址结束BWriteArr(dirChild,dir[512-k]);引一次寻址中盘快记录的一次寻的盘快号k--;}if(k!=0)dir[512-k+1]=-1;//标志}}}//函数描述:清空iNode信息,并分配磁盘空间//入口参数:无BWrite(dirChild,dir[512-i])未实现//根据文件长度非配文件磁盘节点//直接寻址}//函数描述:创建一个iNode,并分配磁盘空间//入口参数:无}//函数描述:存在文件,并分配iNOde节点和磁盘空间//入口参数:无cout<<"当前文件超出长}}//函数描述:创建一个文件,//入口参数:无int无重名现象,创建文件,并分配iNOde节点和磁盘空间AL);}}//函数描述:在当前目录创建一个子目录//入口参数:无int盘空间}//函数描述:打开一个文件,//入口参数:无while(left&&i){left--;i--;}if(left>0){while(left&&i){i--;left--;}}if(left>0){//二级索引while(left&&k){while(left&&j){//二级索引二次寻址left--;j--;}k--;}}}//函数描述:打开一个文件,//入口参数:无}}//函数描述:打开一个文件,//入口参数:无intif(blockNum==-1){//不存在该文件,退出}}}}//函数描述:回收一块空余磁盘片//入口参数:无if(SS[0]<=49){一组回写到上一组记录空闲盘快号的磁盘freeBlockNum=SS[1];//将当前空白的一组第一个盘快作为下一个盘组的记录盘//修改超级栈}}//函数描述:回收文件占用的磁盘//入口参数:无while(left&&i){//直接索引回收left--;i--;}if(left>0){//一级索引回收while(left&&i){i--;left--;}}if(left>0){//二级索引while(left&&k){while(left&&j){//二级索引二次回收left--;j--;}级索引一次寻址k--;}}}//函数描述:回收文件的iNOde节点//入口参数:无}//函数描述:删除索引中一项//入口参数:无for(inti=0;i<64;i++){}}}//函数描述:删除一个文件//入口参数:无if(blockNum==-1){//不存在该文件,退出}}}//函数描述:删除一个目录//入口参数:无if(blockNum==-1){//不存在该文件,退出if(IsDir(iNode,blockNum)){}}}//函数描述:显示目录项的内容//入口参数:无for(inti=0;i<currDir->DirCount;i++){if(currDir->childItem[i].i_BNum!=-1){}}}//函数描述:销毁资源//入口参数:无}//函数描述:打印版权信息//入口参数:无printf("单位:济南大学信息学院计本0601班\n");printf("作者:范海青\n");printf("版权所有翻版必究\n");}//函数描述:打印版权信息//入口参数:无//打印命令//打印命令及解释{printf("命令使用指南\n");新建文件\n");建立子目录\n");打开文件\n");删除文件\n");删除目录\n");printf("6:dir显示目录\n");退出系统\n");清屏\n");}//根节点//根节点Linkdisk();//成组连接Init();while(run){}{新建问件cout<<"\n请输入文件长度,单位}//建立子目录//显示当前目录下的信息//退出系统//清屏}}}测试数据及程序运行情况程序启动界面打印作者信息程序初始化并打印提示信息实验过程中出现的问题及解决方法会影响试验几过,主要如下实验体会这

温馨提示

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

评论

0/150

提交评论