实验八实验模拟dos文件的建立概念.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验八模拟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,就可以把文件索引出来。参考代码:#includestring.h //使用字符串函数时需要的头文件#includestdio.h #includestdlib.hconst int FDF=-2;const int FFF=-1;const int N=100;int filenumber;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(\t文件个数:%d \n,filenumber);//输出文件个数printf(\t文件名起始块号文件长度\n);//输出文件名,起始块号和文件长度for(i=0;ifilenumber;i++){printf( %s %d %d\n,file[i].name,file[i].start,file[i].length);}}//显示FAT表void printFAT()//定义无参数返回值的printFAT函数{int i;printf(\t空闲块数:%d\n,freespace);printf(\t-2代表FDF,-1代表FFF\n); for(i=0;iN;i++){printf( No.%d %d\n,i,FAT[i]);}}//搜索文件void search(char *tmpname){ int i; for(i=0;ifilenumber;i++) { if(strcmp(file[i].name,tmpname)==0)//比较插入文件名与已存在文件名是否相同 { printf(\t找

文档评论(0)

502992 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档