FAT文件系统操作系统课程设计实验报告
实验四 文件系统 实验报告

文件系统实验报告一、实验目的了解操作系统中文件系统的原理以及实现方法。
二、实验方法通过FAT12文件系统的解读,了解文件系统的原理和实现。
三、实验任务通过对FAT12文件系统的了解,编写程序,读取并列出一个虚拟软盘中文件信息(文件名、属性、修改时间等),以及读取其中的文件内容四、实验要点FAT12文件系统的了解,Linux系统下文件读写相关系统调用。
五、实验过程1. FAT12 文件系统分析簇是操作系统分配文件空间的基本单位,簇由若干个扇区组成。
在FAT12文件系统中,簇号的有效位是12位,所以这种文件系统就被称为FAT12。
FAT12其中,引导区中储存着一些基本的信息。
例如,0x0000000B和0x0000000C 两个字节保存着每个扇区的大小,0x0000000D保存着每个簇占用多少个扇区。
FAT区中储存着簇号。
在0x00000200开始的三个字节,分别储存设备类型标记(0xF0为软盘);第二个第三个字节均为0xFF,是FAT标识符。
在FAT12文件系统中,每个簇占用12位,即1.5个字节。
簇号与地址的对应关系如下表:然后对读出的两个字节进行位运算处理,得到下一簇的簇序号。
注意,这里同样需要对高低位进行处理,即使用位计算的方式提取相应的簇号信息。
根据上述的原理,可以得出一个函数,以一个簇号为参数,返回值为文件下一个簇号。
代码如下:int getNextClutserId(FILE *fp, short clusterId){unsigned short tmp, low = 0, high = 0;;int address = (clusterId * 3 / 2) + 0x0000200;fseek(fp, address, SEEK_SET);fread((void *)(&tmp), 1, sizeof(unsigned short), fp);low = ((tmp & 0xFFF0) >> 4);high = tmp & 0x0FFF;return (clusterId % 2 == 0 ? high : low);}其中,fp 是用于读取文件系统的文件流,clusterID是当前簇号,返回值是下一个簇号。
文件系统设计实验报告

文件系统设计实验报告文件系统设计实验报告一、引言在计算机科学领域,文件系统是操作系统中的一个重要组成部分,用于管理和组织计算机存储设备上的文件和目录。
一个高效稳定的文件系统对于计算机系统的正常运行至关重要。
本实验旨在设计一个简单但功能完善的文件系统,并通过实验验证其性能和可靠性。
二、实验背景文件系统是计算机操作系统的核心组成部分之一,它负责管理计算机存储设备上的文件和目录。
一个好的文件系统应该具备以下特点:高效的文件存取速度、可靠的数据完整性、良好的扩展性和灵活性。
三、实验目标本实验的主要目标是设计一个简单但功能完善的文件系统,并通过实验验证其性能和可靠性。
具体而言,我们将实现以下功能:1. 文件的创建、读取、写入和删除。
2. 目录的创建、删除和遍历。
3. 文件和目录的权限管理。
4. 文件系统的容量管理。
5. 文件系统的备份和恢复。
四、实验设计与实现1. 文件和目录的创建、读取、写入和删除在文件系统中,文件和目录都是通过数据块来存储的。
我们可以使用链表或树的数据结构来组织文件和目录之间的关系。
为了提高文件的读取和写入效率,可以采用缓存机制,将最近访问的文件块缓存在内存中。
2. 目录的创建、删除和遍历目录是文件系统中用于组织和管理文件的一种特殊文件。
为了实现目录的创建、删除和遍历功能,我们可以使用树的数据结构来表示目录结构,并通过递归算法来实现目录的遍历。
3. 文件和目录的权限管理为了保护文件和目录的安全,我们可以为每个文件和目录设置权限。
权限可以分为读、写和执行三种类型。
通过权限管理,可以限制用户对文件和目录的操作,提高文件系统的安全性。
4. 文件系统的容量管理文件系统的容量管理是指对文件和目录所占用的存储空间进行管理。
为了有效利用存储空间,我们可以使用位图或链表等数据结构来管理存储空间的分配和释放。
5. 文件系统的备份和恢复为了保证文件系统的可靠性,我们可以定期对文件系统进行备份。
备份可以通过复制文件和目录的数据块来实现。
操作系统课程设计实验报告

操作系统课程设计实验报告操作系统课程设计实验报告引言:操作系统是计算机科学中的重要课程,通过实验设计,可以帮助学生更好地理解操作系统的原理和实践。
本文将结合我们在操作系统课程设计实验中的经验,探讨实验设计的目的、实验过程和实验结果,以及对操作系统的理解和应用。
一、实验设计目的操作系统课程设计实验的目的是帮助学生深入理解操作系统的工作原理和实际应用。
通过设计和实现一个简单的操作系统,学生可以更好地掌握操作系统的各个组成部分,如进程管理、内存管理、文件系统等。
同时,实验设计还可以培养学生的动手能力和问题解决能力,提高他们对计算机系统的整体把握能力。
二、实验过程1. 实验准备在进行操作系统课程设计实验之前,我们需要对操作系统的基本概念和原理进行学习和理解。
同时,还需要掌握一些编程语言和工具,如C语言、汇编语言和调试工具等。
这些准备工作可以帮助我们更好地进行实验设计和实现。
2. 实验设计根据实验要求和目标,我们设计了一个简单的操作系统实验项目。
该项目包括进程管理、内存管理和文件系统三个主要模块。
在进程管理模块中,我们设计了进程创建、调度和终止等功能;在内存管理模块中,我们设计了内存分配和回收等功能;在文件系统模块中,我们设计了文件的创建、读写和删除等功能。
通过这些模块的设计和实现,我们可以全面了解操作系统的各个方面。
3. 实验实现在进行实验实现时,我们采用了分阶段的方法。
首先,我们实现了进程管理模块。
通过编写相应的代码和进行调试,我们成功地实现了进程的创建、调度和终止等功能。
接下来,我们实现了内存管理模块。
通过分配和回收内存空间,我们可以更好地管理系统的内存资源。
最后,我们实现了文件系统模块。
通过设计文件的读写和删除等功能,我们可以更好地管理系统中的文件资源。
三、实验结果通过实验设计和实现,我们获得了一些有意义的结果。
首先,我们成功地实现了一个简单的操作系统,具备了进程管理、内存管理和文件系统等基本功能。
模拟实现单级目录的FAT文件系统【操作系统报告】

模拟实现单级目录的FAT文件系统【操作系统报告】一、课程设计的性质和目的操作系统课程设计是计算机专业的专业课程,通过课程设计使学生进一步巩固课堂所学知识,全面熟悉、掌握操作系统的基本设计方法和技巧,进一步提高分析问题、解决问题及上机操作能力,为将来从事计算机工作打下一定的专业基础。
二、设计课题课题一:模拟实现单级目录的FAT文件系统基本思路:用二进制文件空间模拟磁盘空间,用文件块操作模拟磁盘块操作。
基本设计要求:1、实现如下文件系统功能(过程或函数):a、打开文件系统FILE *OPENSYS(char *filename);b、关闭文件系统int CLOSESYS(FILE *stream);c、显示目录void LISTDIR(void);d、建立文件int FCREATE(char *filename);e、删除文件int FDELETE(char *filename);f、打开文件int FOPEN(char *filename);g、关闭文件int FCLOSE(int fileid);h、文件块读int FREAD(void *ptr, int n, int fileid);i、文件块写int FWRITE(void *ptr, int n, int fileid);j、判断文件结束int FEOF(int fileid);k、获取文件指针long FGETPOS(int fileid);l、设置文件指针int FSETPOS(int fileid, long offset);m、取得文件长度long FGETLEN(char *filename);2、提供文件系统创建程序3、有功能检测模块4、为简化程序设计,假定目录区域大小固定。
文件系统空间划分:可以使用的C语言文件操纵函数:FILE *fopen(const char *filename, const char *mode);int fclose(FILE *stream);int fseek(FILE *stream, long offset, int whence);long ftell(FILE *stream);size_t fread(void *ptr, size_t size, size_t n, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);课题二:模拟实现单级目录、单级索引的索引文件系统使用链接域将同一文件的各索引块按顺序连接起来;其余各项同课题一。
fat表实验

合肥工业大学计算机与信息学院实验报告课程:操作系统专业班级:计算机科学与技术班学号:姓名:一、实验目的:1、通过查看FAT12文件系统的扫描数据,并调试扫描的过程,理解FAT12文件系统管理软盘的方式。
2、通过改进FAT12文件系统的扫描功能,加深对FAT12文件系统的理解。
二、实验内容:1、阅读控制台命令“sd”相关的源代码,并查看其执行的结果:2、根据BPB中的信息计算出其他信息:通过BPB中保存的信息重新计算出下列信息,并打印输出:(1) 计算并打印输出根目录的起始扇区号,即pVcb->FirstRootDirSector的值。
(2) 计算并打印输出根目录的大小,即pVcb->RootDirSize的值。
(3) 计算并打印输出数据区的起始扇区号,即pVcb->FirstDataSector的值。
(4) 计算并打印输出数据区中簇的数量,即pVcb->NumberOfClusters的值。
在ConsoleCmdScanDisk函数中,使用了下面的语句打印输出根目录的起始扇区号:fprintf(StdHandle, "First Sector of Root Directroy: %d\n", pVcb->FirstRootDirSector);根目录的起始扇区号可以使用保留扇区的数量加上FAT表占用扇区的数量来计算获得,而这些信息都可以从BPB中获得,所以上面的语句可以修改为:fprintf(StdHandle, "First Sector of Root Directroy: %d\n", pVcb->Bpb.ReservedSectors +pVcb->Bpb.Fats * pVcb->Bpb.SectorsPerFat);用fprintf(StdHandle, "Size of Root Directroy : %d\n", pVcb->Bpb.RootEntries * 32);代替fprintf(StdHandle, "Size of Root Directroy : %d\n", pVcb->RootDirSize);用fprintf(StdHandle, "First Sector of Data Area : %d\n", (pVcb->Bpb.ReservedSectors + pVcb->Bpb.Fats * pVcb->Bpb.SectorsPerFat) + (pVcb->Bpb.RootEntries * 32 / pVcb->Bpb.BytesPerSector));代替fprintf(StdHandle, "First Sector of Data Area : %d\n", pVcb->FirstDataSector);用fprintf(StdHandle, "Number Of Clusters : %d\n\n", pVcb->Bpb.Sectors - ((pVcb->Bpb.ReservedSectors + pVcb->Bpb.Fats * pVcb->Bpb.SectorsPerFat) + (pVcb->Bpb.RootEntries * 32 / pVcb->Bpb.BytesPerSector)));代替fprintf(StdHandle, "Number Of Clusters : %d\n\n", pVcb->NumberOfClusters);3、阅读控制台命令“dir”相关的源代码,并查看其执行的结果:4、输出每个文件所占用的磁盘空间的大小:文件的大小与文件所占用的磁盘空间是两个不同的概念,文件所占用的磁盘空间是簇的整数倍,所以文件所占用的磁盘空间总是大于或等于文件的大小。
磁盘存储结构与文件恢复实验(FAT文件系统)

磁盘存储结构与⽂件恢复实验(FAT⽂件系统)实验地点:主楼A2-412⼀、实验室名称:主楼实验室A2-412⼆、实验项⽬名称:磁盘存储结构与⽂件恢复实验三、实验学时:6学时四、实验原理:在Debug环境下利⽤基本汇编程序对引导扇区、⽂件分配表、⽬录表等结构进⾏显⽰,并进⾏分析;使⽤⼯具软件WINHEX对指定的⽂件(被删除⽂件)进⾏恢复。
五、实验⽬的:1)了解⽂件系统在磁盘上的存储映像和它在系统安全中的地位和作⽤;2)了解⽂件⽬录结构及其访问⽅式;3)掌握使⽤系统基本汇编程序进⾏磁盘和⽂件结构访问的技术和编程⽅法,为数据恢复奠定基础。
六、实验内容:1)在DEGUB下,使⽤汇编指令读取MBS引导扇区,记录并分析说明结构。
2)在DEGUB下,使⽤汇编指令读取DBS引导扇区,记录并分析说明结构。
3)在DEGUB下,使⽤汇编指令读取FAT、FDT,记录并分析说明结构。
4)⽣成⼀个简单⽂本⽂件(*.txt⽂件),结合FAT,FDT信息,使⽤汇编指令,在硬盘上查找并读出该⽂件,记录并说明查找过程。
5)删除⽣成的⽂本⽂件,查看该⽂件在FAT、FDT所对应的⽂件存储状态以及该⽂件在数据区对应扇区的内容,说明⽂件删除操作的原理。
6)使⽤WINHEX软件进⾏⽂件恢复操作练习。
七、实验器材(设备、元器件):PC微机⼀台(⾄少具有⼀个FAT格式磁盘分区),VMware Workstation6.0虚拟机软件,DOS7.0,WINHEX软件。
⼋、实验步骤:任务⼀、读取MBS引导扇区1.在DEGUB下,使⽤汇编指令读取MBS引导扇区。
2.根据显⽰的信息,分析说明MBS结构及字节含义和具体数值。
任务⼆、读取DBS引导扇区和磁盘参数块BPB1.在DEGUB下,使⽤汇编指令读取DBS引导扇区。
2.根据显⽰信息,分析说明引导扇区结构。
3.根据显⽰信息说明磁盘参数块BPB结构及各段含义和具体数值。
任务三、读取FAT表1.⽣成⼀个简单⽂本⽂件(*.txt⽂件),取“长⽂件名”。
文件系统实验报告

一、实验目的1. 理解文件系统的基本概念和组成。
2. 掌握文件系统的创建、删除、修改和查询等基本操作。
3. 了解文件系统的性能分析和优化方法。
4. 提高对文件系统原理的理解和实际操作能力。
二、实验环境1. 操作系统:Windows 102. 文件系统:NTFS3. 实验软件:Windows资源管理器、Notepad++等三、实验内容1. 文件系统的基本概念和组成(1)文件:存储在文件系统中的数据单元,可以是程序、文档、图片等。
(2)目录:用于组织文件的结构,类似于文件夹。
(3)文件系统:管理存储设备上文件和目录的数据结构。
2. 文件系统的创建、删除、修改和查询等基本操作(1)创建文件:使用Notepad++创建一个名为“test.txt”的文本文件。
(2)创建目录:在Windows资源管理器中,创建一个名为“test”的目录。
(3)删除文件:选中“test.txt”文件,按Delete键删除。
(4)删除目录:选中“test”目录,按Delete键删除。
(5)修改文件:使用Notepad++打开“test.txt”文件,修改内容后保存。
(6)查询文件:在Windows资源管理器中,通过路径或搜索功能查找“test.txt”文件。
3. 文件系统的性能分析和优化方法(1)查看磁盘空间使用情况:在Windows资源管理器中,选中磁盘分区,查看磁盘空间使用情况。
(2)清理磁盘:使用Windows自带的磁盘清理工具清理磁盘垃圾文件。
(3)优化文件系统:使用Windows自带的磁盘碎片整理工具优化文件系统。
四、实验结果与分析1. 创建文件和目录实验结果显示,使用Notepad++创建了一个名为“test.txt”的文本文件,使用Windows资源管理器创建了一个名为“test”的目录。
2. 删除文件和目录实验结果显示,成功删除了“test.txt”文件和“test”目录。
3. 修改文件实验结果显示,使用Notepad++修改了“test.txt”文件的内容,并成功保存。
操作系统实验六实验报告

实验六FAT文件系统实验一、实验环境Windows2000操作系统二、实验目的从系统分析的角度出发,了解FAT文件系统的组织结构和文件的存储方式。
进一步理解操作系统文件管理的基本思想。
三、实验内容(1)了解3吋软盘的FAT文件系统结构。
(2)查看文件分配表的簇号链。
(3)查看文件目录表中文件目录结构。
(4)了解用簇号链映射的文件链式存储结构。
(5)分析目录文件的组成。
四、实验准备复习文件组成,文件描述目录信息内容及含义。
复习文件系统的存储结构概念。
复习文件存储控件管理方法。
五、实验步骤1、进入DEBUG环境,装入FAT文件系统结构。
执行命令:L 0 0 0 21说明:将0号驱动器中,逻辑扇区号从0开始的共21H个扇区读入内存,放在DS:0000为起始的地址中。
2、观察1.44M软盘中FAT12文件系统结构。
执行命令D 0000 (显示从0地址开始的内存)连续执行D命令,每次显示128个字节,可见文件系统结构。
3、分析文件分配表结构,了解用簇链映射的文件的链式存储结构。
执行命令:D 200思考:首簇号为003的文件共包括几个扇区?它分布在哪几个物理扇区中?1.44M 软盘逻辑扇号与物理扇区的对应关系逻辑扇号0 # ——0道0面1扇逻辑扇号1 H ~11H ——0 道0 面2 ~18 扇逻辑扇号12 H ~23H ——0 道1 面1 扇~18 扇逻辑扇号24 H ~35H ——1 道0 面1 扇~18 扇其中:000 簇和001 簇中包含了磁盘类型002 簇对应了数据区21H 逻辑扇(0道1面16扇),现在为FFF。
003 簇中为FFF表示是hi文件最后一簇。
故首簇号为003的文件包括1个扇区,分布在0道1面17扇。
4、观察1.44M软盘中文件目录表FDT以及文件目录结构执行命令:L 0 0 0 21说明:将逻辑扇区0H开始的共21H个物理扇区装日DS:0000H起始的内存。
执行命令:D2600说明:显示从2600H地址开始的FDT文件表思考:(1)计算1.44M软盘根目录最多可以容纳多少文件?答:FDT逻辑扇区号为(13H-20H),占14个扇区,每个目录项32个字节;每个扇区512字节,故可容纳14*512/32=224个文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统课程设计之三设计任务:模拟OS文件系统在任一OS(Window或者Dos;也可以是在Linux下,但要求能将结果演示给老师看)下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟OS字,第⑤、每个目录实际能放下文件或子目录30项。
⑸、文件系统空间分配:①、第0个盘块(1k)存放磁盘信息(可以设定为格式说明“FAT32”、盘块大小,盘块数等内容)②、第1个盘块起,至125盘块,共125个盘块(125k)存放FAT内容③、第126、127(2个)盘块,存放位示图④、从第128盘块至10000盘块,皆为数据(区)盘块,其逻辑编号从0开始,至9872号数据盘块,即第0数据盘块为128号盘块,第1数据盘块为129号盘块,…⑤、第0数据盘块(即128号盘块),存放根目录(同样只用一个盘块作根目录),由于第0、1目录项为“.”(本目录), “..”(父目录),因此根目录下同样只能存放30个文件或目录,并且从第2个目录项开始。
⑥、文件或子目录数据,放在第1数据盘块及以后的数据盘块中,由用户按需要使用。
内容⑺、删除文件#DelFile 文件名.扩展名,在文件所在的目录项中,将第一个字节变为0xE5,并同时修改FAT内容和位示图内容;如果文件不存在,给出出错信息⑻、文件拷贝#CopyFile 老文件,新文件,为新文件创建一个目录项,并将老文件内容复制到新文件中,并同时修改FAT内容和位示图内容⑼、显示位示图内容#ShowBitMP,将位示图内容(已有信息部分),显示在屏幕上(按十六进制)⑽、显示FAT内容#ShowFAT,将FAT内容(已有信息部分),显示在屏幕上(按十六进制)4、程序的总体流程为:⑴、输出提示符#,等待接受命令,分析键入的命令;⑵、对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令关于对FAT表和MAP表的用法1.当要用到数据块是,查询MAP表(因为只做比较查询即可),查询到的未用位置置1,然后在FAT表上进行相应记录,在本程序做出的规定是,当文件夹FAT 表做-1,若是文件则按照FAT做对应的顺序记录,最后一块同样是-1结束,2.回收的时候,是按照FAT表的首项,做顺序置0,然后MAP也在相应位置置0const int MAP_SIZE=10001; //MAP 长度const int FATNUM=125; //FAT的盘块数第块没有用const int FATLIST=512; //每个盘口FAT的记录数const int DATABEG=128; //数据项开始FAT号struct FCB{char fname[8]; //文件名char exname[3]; //扩展名short fnum; //首块号int length; //文件大小,目录则文件大小为;};struct fatid{short id[FATNUM*FATLIST]; //FAT 大小512个记录一块}*FAT;struct map{bitset<MAP_SIZE> maplist;}void init(struct fatid *FAT){int i,j;for(i=1;i<FATNUM*FATLIST;i++) //第块不使用{if(i>DATABEG)FAT->id[i]=0;elseFAT->id[i]=-1;}}void format(){bool i;printf("初始化已经完成,现在可以进行操作了!\n\n"); }/**创建子目录*/int mkdir(char *str){int i,j;int blockid; //将要创建的FAT号int blockdir; //将要创建的目录块号int listnum; //目录块内编号struct fatid *flagid;struct DIR *dir; //当前目录指针struct map *MAP;struct fatid *FAT;if(strcmp(str,"")==0){printf("目录下有同名文件夹\n");return 0;}}for(i=2;i<LIST_SIZE;i++){if(strcmp(dir->list[i].fname,"")==0) //有空的目录块且无重名,第一版本的时候与上面的循环放在一起,存在一个情况是前面的建立的目录删除后,直接被同名的覆盖了break;if(i>LIST_SIZE){printf("内存不足\n");return 0;}}flagid=(struct fatid *)(file+BLOCK_SIZE); //fat 首位地址for(j=DATABEG+1;j<BLOCK_NUM;j++){if(flagid->id[j]==0){blockdir=j;break;*/int listshow(){int i,sumfile,sumdir,fl[100],dr[100];//fl 为文件的号数,dr为目录的号数sumfile=sumdir=0;struct DIR *dir;struct fatid *FAT;dir=(struct DIR *)(file+currentdir*BLOCK_SIZE);for(i=0;i<LIST_SIZE;i++)if(dir->list[i].length==0&&(strcmp(dir->list[i].fname,"")!=0)&&(dir->list[i].fnum!=0)) //为目录的{dr[sumdir]=i;sumdir++;}if(dir->list[i].length!=0&&strcmp(dir->list[i].fname,"")!=0) //为目录的{fl[sumfile]=i;sumfile++;struct DIR *flagdir; //标记目录块char c='a'; //做用户交互int m=2; //从第三个子目录项开始搜索要删除的目录项情况FAT=(struct fatid *)(file+BLOCK_SIZE);dir=(struct DIR *)(file+currentdir*BLOCK_SIZE); //当前目录指针MAP=(struct map *)(file+(FATNUM+1)*BLOCK_SIZE);for(i=2;i<LIST_SIZE;i++)if(strcmp(dir->list[i].fname,str)==0) //找到要删除的子目录{break;}}if(i>LIST_SIZE){printf("该文件夹下不存在%s",str);return 0;}strcpy(flagdir->list[0].fname,""); //要删除目录的DIR strcpy(flagdir->list[0].exname,"");flagdir->list[0].fnum=0;strcpy(flagdir->list[1].fname,"");strcpy(flagdir->list[1].exname,"");flagdir->list[0].fnum=0;MAP->maplist[blocknum]=0;FAT->id[blocknum]=0;FAT->id[0]=FAT->id[0]+1;return 0;}/**更改当前目录*/int changedir(char *str){int i,j;return 1;}for(i=2;i<LIST_SIZE;i++) //子目录{if(strcmp(dir->list[i].fname,str)==0&&strcmp(dir->list[i].exname,"dir")==0){currentdir=dir->list[i].fnum;break;}}if(i>LIST_SIZE){printf("找不到指定的目录%s\n",str);return 0;}CURRENT=CURRENT+str+"\\";return 1;}templength=length;l=strlen(str);//取文件名for(i=0;i<l;i++){name[i]=str[i];if(str[i+1]=='.')break;if(i>=8){printf("文件名称过长\n");return 0;}//去扩展名j=0;i++;i++;//除去点return 0;}if(strcmp(dir->list[i].fname,"")==0){break;}}if(i>LIST_SIZE){printf("内存不足\n");return 0;strcpy(dir->list[i].fname,name);strcpy(dir->list[i].exname,exname);dir->list[i].length=length;flag=1;j=DATABEG+1;while(1){//不断循环if(MAP->maplist[j]!=1){if(!templength--) //当length全部被分配完截止/**复制文件*/int cp(char *str,char *newname){int i,j,k,l,length;char name[8]={0}; //文件名称char exname[3]={0}; //文件扩展名struct DIR *dir;l=strlen(str);//取文件名for(i=0;i<l;i++){name[i]=str[i];if(str[i+1]=='.')break;}if(i>LIST_SIZE){printf("找不到指定的文件%s\n",str);return 0;}length=dir->list[i].length ;create(newname,length);}/**删除文件*/int delfile(char *str){int i,j,l,k;int blocknum; //要删除的首块地址int temp;char name[8]={0}; //文件名称char exname[3]={0}; //文件扩展名if(strcmp(str,"")==0){printf("文件名不能为空\n");return 0;}dir=(struct DIR *)(file+(currentdir)*BLOCK_SIZE);MAP=(struct map *)(file+(FATNUM+1)*BLOCK_SIZE);FAT=(struct fatid *)(file+BLOCK_SIZE);for(i=2;i<LIST_SIZE;i++){if((strcmp(dir->list[i].fname,name)==0)&&(strcmp(dir->list[i].exname,exname)==0)) break;}if(i>LIST_SIZE){printf("找不到%s 文件\n",str);return 0;}printf("已经成功删除%s\n",str);return 0;}int ShowBitMp(){int i,j;int list[BLOCK_SIZE]={0};struct map *MAP;MAP=(struct map *)(file+(FATNUM+1)*BLOCK_SIZE); j=0;for(i=DATABEG+1;i<BLOCK_SIZE;i++){if(MAP->maplist[i]==1){list[j]=i;j++;}{list[j]=i;j++;}}j=0;flag=0;for(i=0;i<BLOCK_SIZE;i++){if(list[i]!=0){ printf(" %0x",list[i]);if(flag){if(j%10==0)printf("\n");}flag=1;j++;}}return 0;}printf("ShowFAT 显示FAT.\n");printf("\n--------------------------------------------\n");//申请虚拟空间file=(char *)malloc(DISK_SIZE*sizeof(char));//加载if((fp=fopen(FilePath,"r"))!=NULL){fread(file,sizeof(char),DISK_SIZE,fp);printf("加载磁盘文件%s文件成功,现在可以操作\n\n",FilePath);}else{printf("这是第一次使用文件管理系统");}}int main(){int length;char newname[20];}else if(strcmp(cmd,"cp")==0){cin>>command>>newname;cp(command,newname);}else if(strcmp(cmd,"rm")==0){scanf("%s",command);delfile(command);}else if(strcmp(cmd,"exit")==0){exit();break;}else if(strcmp(cmd,"ShowFAT")==0){ShowFat();}else if(strcmp(cmd,"ShowBitMp")==0){ ShowBitMp();}else {printf("无效指令,请重新输入:\n");}}。