内容发布更新时间 : 2024/11/14 14:34:25星期一 下面是文章的全部内容请认真阅读。
实验八模拟DOS文件的建立
一、 上机目的:
磁盘文件是磁盘上存储的重要信息,通过本实验模拟DOS文件的建立和使用情况,理解磁盘文件的物理结构。文件管理是操作系统中重要的内容之一,不同的文件系统提供了不同的物理结构,通过实验,深入理解文件的物理结构与存取方法之间的关系,以便更好的掌握文件系统的概念。 二、 上机内容:
(1)模拟设计DOS操作系统中磁盘文件的存储结构
(2)模拟设计便于直接存取的索引文件结构 三、 开发环境
Microsoft Visual C++环境,采用C语言编程 四、 分析设计 (一)实验原理
(1)模拟设计DOS操作系统中磁盘文件的存储结构
DOS操作系统对磁盘文件的管理采用链接结构,将所有的链接指针集中在一起,存放在文件分配表(FAT)中。连接文件的第一个物理块号登记在文件目录中。其设计思想是:假定磁盘上共有N个物理块可供使用,当要存放文件时,从FAT表中寻找其值为0的项,用其对应的物理块存放文件信息,并把文件占有的各物理块用链接指针登记在FAT表中,再把文件的第一个物理块号登记在文件目录中。在DOS中FAT表的前两项用来记录磁盘的类型。而从第2项开始记录磁盘的分配情况和文件各物理块的链接情况。在FAT表中第三项的值如果为0,表示对应的第三块空闲。
假设磁盘空间共有100个物理块,设计一个文件分配表FAT[100],其中每一个元素与一个物理块对应。开始时,先把FAT[100]初始化为0,前两项是用来记录磁盘的类型,所以赋常值分别为-2,-1。然后再写入文件,假设写入的文件为A,文件长度为6,要把这个文件写入磁盘,就要为这个文件分配六个物理块,所以在FAT[100]表中,找到六个空闲的物理块分配给文件A,系统就能够在磁盘上正确的保存文件A。当你要给文件A在指定的位置添加记录时,系统就要先找到一个空闲的物理块,然后把指定位置的物理块的值赋值给找到的空
闲块,然后再把插入的记录插在原先指定的物理块上。这样做是为了不把在指定位置的值给覆盖掉,又能正确的插入。
(2)模拟设计便于直接存取的索引文件结构
在 MS-DOS 中通过文件目录,再沿着链查找FAT表,便可直接找到指定逻辑记录对应的物理块。在小型机或更高级的文件系统中,直接存取文件的方法是为每个文件建立一个索引表,指出各逻辑记录与物理块的对应关系。
在你要索引文件时,search()函数就能够通过比较你输入的文件名是否和你之前建立的文件名相同,如果相同,就会索引出该文件,并且显示该文件的文件名、起始块号、文件长度的详细信息;如果不相同,就会输出“找不到该文件”,
在索引索引点时,就要用search2()函数就通过输入的索引点是否为文件存储的最后一个块而且输入的索引点的下一个物理块为0,就可以把文件索引出来。
五、 参考代码:
#include
struct FILEINFO//声明一个结构体类型 { char name[10];//文件名为字符串 int start;//起始块号为整形 int length;//文件长度为整形 };
FILEINFO file[10];//定义结构体数组, file是结构体数组名,10为数组长度 int FAT[N],freespace; //FAT表和剩余空间
//显示文件目录
void printfmenu()//定义无参数返回值的printfmenu函数 { int i;//定义变量i为整形 printf(\文件个数:%d \\n\输出文件个数 printf(\文件名起始块号文件长度\\n\输出文件名,起始块号和文件长度 for(i=0;i { printf(\ %s %d %d\\n\ } } //显示FAT表 void printFAT()//定义无参数返回值的printFAT函数 { int i; printf(\空闲块数:%d\\n\ printf(\代表FDF,-1代表FFF\\n\ for(i=0;i //搜索文件 void search(char *tmpname) { int i; for(i=0;i //搜索索引点 void search2(int searchpoint) { int i=0; int m; if(FAT[searchpoint]==0) printf(\该点空缺,没有文件!\ else