{ int FAT1[BlockCount]; //FAT1 int FAT2[BlockCount]; //FAT2 struct dirFile root; //根目录 char data[BlockCount-3][BlockSize]; void format(){ memset(FAT1,0,BlockCount); //FAT1 memset(FAT2,0,BlockCount); //FAT2 FAT1[0]=FAT1[1]=FAT1[2]=-2; //0,1,2盘块号依次代表FAT1,FAT2,根目录区 FAT2[0]=FAT2[1]=FAT2[2]=-2; //FAT作备份 root.init(2,2,\根目录区 memset(data,0,sizeof(data));//数据区 } };
FILE *fp; //磁盘文件地址
char * BaseAddr; //虚拟磁盘空间基地址 string currentPath=\ //当前路径 int current=2; //当前目录的盘块号 string cmd; //输入指令
struct DISK *osPoint; //磁盘操作系统指针 char command[16]; //文件名标识
struct OPENLIST* openlist; //用户文件列表指针
int format();
int mkdir(char *sonfname); int rmdir(char *sonfname); int create(char *name); int listshow();
int delfile(char *name);
int changePath(char *sonfname); int write(char *name); int exit();
int open(char *file); int close(char *file); int read(char *file);
/*------------初始化-----------------------*/ int format() { current = 2; currentPath=\ //当前路径 osPoint->format();//打开文件列表初始化 delete openlist; openlist=new OPENLIST;
/*-------保存到磁盘上myfiles--------*/ fp = fopen(FilePath,\ fwrite(BaseAddr,sizeof(char),DiskSize,fp); fclose(fp); printf(\格式化成功!!\\n\ return 1; }
int mkdir(char *sonfname)/*-----------------------创建子目录-------------------*/
{//判断是否有重名寻找空白子目录项寻找空白盘块号当前目录下增加该子目录项分配子目录盘块,并且初始化修改fat表 int i,temp,iFAT; struct dirFile *dir; //当前目录的指针 if(current == 2) // 根目录 dir=&(osPoint->root); else dir=(struct dirFile *)(osPoint->data [current-3]); /*--------为了避免该目录下同名文件夹--------*/ for(i = 1;i
/*-------------接下来进行分配----------*/ osPoint->FAT1[iFAT]=osPoint->FAT2[iFAT] = 2; //2表示分配给下级目录文件 //填写该分派新的盘块的参数 strcpy(dir->fcb[temp].fname,sonfname); dir->fcb[temp].type=DIRECTORY; dir->fcb[temp].fatherBlockNum=current; dir->fcb[temp].currentBlockNum=iFAT; //初始化子目录文件盘块 dir=(struct dirFile*)(osPoint->data [iFAT-3]); //定位到子目录盘块号 dir->init (current,iFAT,sonfname);//iFAT是要分配的块号,这里的current用来指要分配的块的父块号 printf(\创建子目录成功!\\n\ return 1; }
int rmdir(char *sonfname)/*-------删除当前目录下的文件夹--------*/ { 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 if(sonDir->fcb[i].type!=Zero) { printf(\该文件夹为非空文件夹,为确保安全,请清空后再删除!\\n\ return 0; } } /*开始删除子目录操作*/ osPoint->FAT1[j] = osPoint->FAT2[j]=0; //fat清空 char *p=osPoint->data[j-3]; //格式化子目录 memset(p,0,BlockSize); dir->fcb[temp].initialize(); //回收子目录占据目录项 printf(\删除当前目录下的文件夹成功\\n\ return 1; } /*-----------在当前目录下创建文本文件---------------*/ int create(char *name){ int i,iFAT;//temp, int emptyNum = 0,isFound = 0; //空闲目录项个数 struct dirFile *dir; //当前目录的指针 if(current==2) dir=&(osPoint->root); else dir=(struct dirFile *)(osPoint->data [current-3]); for(i=1;i break; } if(i==BlockCount){ printf(\磁盘已满!\\n\ return 0; } iFAT=i; /*------进入分配阶段---------*///分配磁盘块 osPoint->FAT1[iFAT] = osPoint->FAT2[iFAT] = 1; /*-----------接下来进行分配----------*///填写该分派新的盘块的参数 strcpy(dir->fcb[emptyNum].fname,name); dir->fcb[emptyNum].type=GENERAL; dir->fcb[emptyNum].fatherBlockNum=current; dir->fcb[emptyNum].currentBlockNum=iFAT; dir->fcb[emptyNum].size =0; char* p = osPoint->data[iFAT -3]; memset(p,4,BlockSize); printf(\在当前目录下创建文本文件成功!\\n\ return 1; } /*-------查询子目录------------*/ int listshow() { int i,DirCount=0,FileCount=0; //搜索当前目录 struct dirFile *dir; //当前目录的指针 if(current==2) dir=&(osPoint->root); else dir=(struct dirFile *)(osPoint->data [current-3]); for(i=1;i 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库简单文件系统的实现实验报告(2)在线全文阅读。
相关推荐: