实验4 文件系统模拟 实验4 文件系统模拟 一、 实验目的: 设计和实现基于 FAT12 的模拟磁盘卷及其 I/O 系统的文件存取操作基本功能函数,深入领会和理解文件系统的体系结构、工作原理和设计要领。 二、 实验设计 1. 根据 FAT12 设计模拟磁盘(1.44MB 软盘映像文件)的磁盘组织结构及文件或空闲盘块管理方法与描述用数据结构,并实现模拟磁盘的创建和格式化操作。 2. 设计和实现模拟磁盘 I/O 操作暨物理盘块与缓冲区(缓冲区与物理盘块大小相同)间数据交互的两个函数。 3. 构建和提供用户与文件系统之间的基本接口,包括目录和文件的创建、重命名、删除和显示操作,目录的进入操作以及文件的定位及读、写操作。 4. 测试系统功能并给出有效证据。 三、 源程序清单和说明 实验4 文件系统模拟 #include #include #include #define BlockSize 512 #define DirSize 32 #define RootSize 2 struct ReserveBlock{ int sysblocknum;/*文件系统总扇区数*/ int resblocknum;/*保留扇区扇区数*/ int fatblocknum;/*FAT 表扇区数*/ int rootblocknum;/*根目录区扇区数*/ char fillchar[BlockSize-4*sizeof(int)];/*填充字节*/ }; struct DirBlock{ char filename[11]; /*文件名限长11个字符*/ char fillchar[DirSize-4*sizeof(int)-sizeof(long int)-11];/*填充字节*/ long filelen; /*文件长度*/ int year,month,day; /*日期*/ int firstblockaddr; /*文件首块扇区号*/ }; struct FCBBlock{ int fileid; /*文件标识*/ struct DirBlock fileinfo; /*目录信息*/ long filepos; /*文件读写指针*/ int fdtblockaddr; /*目录项所在块号*/ int fdtblockindex; /*目录项所在块内序号*/ struct FCBBlock *next;/*指向下一个文件控制块的指针*/ }; struct ReserveBlock sys1; struct FCBBlock *fcb; struct DirBlock fil[32],*dir;/*目录项*/ int *fat1; char *str,*ptr; char fillchar[BlockSize]; FILE *fp; FILE *OPENSYS(char *filename){ int i; fp=fopen(filename,"rb+"); fread(&sys1,1,BlockSize,fp); fat1=(int *)malloc(sys1.sysblocknum); for(i=0;i