77范文网 - 专业文章范例文档资料分享平台

简单文件系统的实现实验报告(3)

来源:网络收集 时间:2018-12-04 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

return 1; }

/*---------在当前目录下删除文件-----------*/ int delfile(char *name) { int i,temp,j; //确保当前目录下有该文件,并且记录下它的FCB下标 struct dirFile *dir; //当前目录的指针 if(current == 2) dir=&(osPoint->root); else dir=(struct dirFile *)(osPoint->data [current-3]); for(i=1;i < BlockFcbCount;i++) //查找该文件 { if(dir->fcb[i].type==GENERAL && strcmp(dir->fcb[i].fname,name)==0){ break; } } if(i == BlockFcbCount){ printf(\当前目录下不存在该文件!\\n\ return 0; } int k; for(k=0;kf [k].type = GENERAL)&& (strcmp(openlist->f [k].fname,name)==0)){ if(openlist->f[k].fatherBlockNum == current){ break; } else{ printf(\该文件未在当前目录下!\\n\ return 0; } } } if(k!=OPEN_MAX){ close(name); }

//从打开列表中删除 /*开始删除文件操作*/ temp=i; j = dir->fcb [temp].currentBlockNum ; //查找盘块号j osPoint->FAT1[j]=osPoint->FAT2[j]=0; //fat1,fat2表标记为空白 char *p=osPoint->data[j - 3]; memset(p,0,BlockSize); //清除原文本文件的内容 dir->fcb[temp].initialize(); //type=0; //标记该目录项为空文件 printf(\在当前目录下删除文件成功!\\n\ return 1; }

/*--------------进入当前目录下的子目录--------------*/ int changePath(char *sonfname) { struct dirFile *dir; //当前目录的指针 if(current==2) dir=&(osPoint->root); else dir=(struct dirFile *)(osPoint->data [current-3]); /*回到父目录*/ if(strcmp(sonfname,\ if(current==2){ printf(\你现已经在根目录下!\\n\ return 0; } current = dir->fcb[0].fatherBlockNum ; currentPath = currentPath.substr(0,currentPath.size() - strlen(dir->fcb[0].fname )-1); return 1; } /*进入子目录*///确保当前目录下有该目录,并且记录下它的FCB下标 int i,temp; for(i = 1; i < BlockFcbCount; i++){ //查找该文件 if(dir->fcb[i].type==DIRECTORY&&strcmp(dir->fcb[i].fname,sonfname)==0){ temp=i; break; } } if(i==BlockFcbCount){ printf(\不存在该目录!\\n\ return 0; }

//修改当前文件信息 current=dir->fcb [temp].currentBlockNum ; currentPath = currentPath+dir->fcb [temp].fname +\ printf(\进入当前目录下的子目录成功!\\n\ return 1; }

int exit(){//保存到磁盘上C:\\myfiles //将所有文件都关闭/*--------System exit---------------------*/ fp=fopen(FilePath,\ fwrite(BaseAddr,sizeof(char),DiskSize,fp); fclose(fp); //释放内存上的虚拟磁盘 free(osPoint); //释放用户打开文件表 delete openlist; printf(\退出文件系统成功!\\n\\n\ return 1; }

int write(char *name)/*-------------在指定的文件里记录信息---------------*/ { int i; char *startPoint,*endPoint; //在打开文件列表中查找 file(还需要考虑同名不同目录文件的情况!!!) for(i=0;if [i].fname,name)==0 ){ if(openlist->f[i].fatherBlockNum ==current){ break; } else{ printf(\该文件处于打开列表中,本系统只能改写当前目录下文件!\\n\ return 0; } } } if(i==OPEN_MAX){ printf(\该文件尚未打开,请先打开后写入信息!!\\n\ return 0; } int active=i; int fileStartNum = openlist->f[active].currentBlockNum - 3 ;

startPoint = osPoint->data[fileStartNum]; endPoint = osPoint->data[fileStartNum + 1]; printf(\请输入文本以Ctrl D号结束:\\t\ char input; while(((input=getchar())!=4)) { if(startPoint < endPoint-1) { *startPoint++ = input; } else{ printf(\达到单体文件最大容量!\ *startPoint++ = 4; break; } } return 1; }

int read(char *file)/*---------选择一个打开的文件读取信息----------*/ { int i,fileStartNum; char *startPoint,*endPoint; //struct dirFile *dir; //在打开文件列表中查找 file(还需要考虑同名不同目录文件的情况!!!) for(i=0;if [i].fname,file)==0 ){ if(openlist->f[i].fatherBlockNum ==current){ break; } else{ printf(\该文件处于打开列表中,本系统只能阅读当前目录下文件!\\n\ return 0; } } } if(i==OPEN_MAX){ printf(\该文件尚未打开,请先打开后读取信息!\\n\ return 0; } int active=i;//计算文件物理地址 fileStartNum = openlist->f[active].currentBlockNum - 3 ; startPoint = osPoint->data[fileStartNum]; endPoint = osPoint->data[fileStartNum + 1]; printf(\该文件的内容为: \

while((*startPoint)!=4&& (startPoint < endPoint)){ putchar(*startPoint++); } printf(\ return 1; }

int open(char *file)//打开文件/*当前目录下添加一个打开文件*/ { int i,FcbIndex; //确保没有打开过该文件 = 相同名字 + 相同目录 for(i=0;if[i].type ==GENERAL && strcmp(openlist->f [i].fname,file)==0 &&openlist->f[i].fatherBlockNum == current) { printf(\该文件已经被打开!\\n\ return 0; } } //确保有空的打开文件项 if(openlist->files == OPEN_MAX){ printf(\打开文件数目达到上限!无法再打开新文件.\\n\ return 0; } //确保当前目录下有该文件,并且记录下它的FCB下标 struct dirFile *dir; //当前目录的指针 if(current==2) dir=&(osPoint->root); else dir=(struct dirFile *)(osPoint->data [current-3]); for(i = 1;i< BlockFcbCount;i++){ //查找该文件 if(dir->fcb[i].type==GENERAL && strcmp(dir->fcb[i].fname,file)==0 ) { FcbIndex=i; break; } } if(i==BlockFcbCount){ printf(\当前目录下不存在该文件!\\n\ return 0; } //装载新文件进入打开文件列表,(FCB信息,文件数++) ??难道名字过不来?

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库简单文件系统的实现实验报告(3)在线全文阅读。

简单文件系统的实现实验报告(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/338511.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: