版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验八模拟DOS文件的建立一、上机目的:磁盘文件是磁盘上存储的重要信息,通过本实验模拟DOS文件的建立和使用情况,理解磁盘文件的物理结构。文件管理是操作系统中重要的内容之一,不同的文件系统提供了不同的物理结构,通过实验,深入理解文件的物理结构与存取方法之间的关系,以便更好的掌握文件系统的概念。二、上机内容:(1)模拟设计DOS操作系统中磁盘文件的存储结构(2)模拟设计便于直接存取的索引文件结构三、开发环境Microsoft Visual C+环境,采用 C语言编程四、分析设计(一)实验原理(1)模拟设计DOS操作系统中磁盘文件的存储结构DOS操作系统对磁盘文件的管理采用链接结构,将所有的链接指
2、针集中在一起,存放在文件分配表(FAT)中。连接文件的第一个物理块号登记在文件目录中。其设计思想是:假定磁盘上共有N个物理块可供使用,当要存放文件时,从FAT表中寻找其值为0的项,用其对应的物理块存放文件信息,并把文件占有的各物理块用链接指针登记在FAT表中,再把文件的第一个物理块号登记在文件目录中。在DOS中FAT表的前两项用来记录磁盘的类型。而从第2项开始记录磁盘的分配情况和文件各物理块的链接情况。在FAT表中第三项的值如果为 0,表示对应的第三块空闲。假设磁盘空间共有 100个物理块,设计一个文件分配表 FAT100,其中每一个元素与一个物理块对应。开始时,先把FAT100初始化为0,前
3、两项是用来记录磁盘的类型,所以赋常值分别为-2,-1 。然后再写入文件,假设写入的文件为A文件长度为6,要把这个文件写入磁盘,就要为这个文件分配六个物理块,所以在FAT100表中,找到六个空闲的物理块分配给文件A系统就能够在磁盘上正确的保存文件Ao当你要给文件 A在指定的位置添加记录时,系统就要先找到一个空闲的物理块,然后把指定位置的物理块的值赋值给找到的空闲块,然后再把插入的记录插在原先指定的物理块上。这样做是为了不把在指定位置的值给覆盖掉,又能正确的插入。(2)模拟设计便于直接存取的索引文件结构在MS-DOS中通过文件目录,再沿着链查找FAT表,便可直接找到指定逻辑记录对应的物理块。在小型
4、机或更高级的文件系统中,直接存取文件的方法是为每个文件建立一个索引表,指出各逻辑记录与物理块的对应关系。在你要索引文件时,search()函数就能够通过比较你输入的文件名是否和你之前建立 的文件名相同,如果相同,就会索引出该文件,并且显示该文件的文件名、起始块号、文件 长度的详细信息;如果不相同,就会输出“找不到该文件”,在索引索引点时,就要用 search2()函数就通过输入的索引点是否为文件存储的最后 一个块而且输入的索引点的下一个物理块为0,就可以把文件索引出来。五、参考代码:#include /使用字符串函数时需要的头文件#include#includeconst int FDF=-2
5、;const int FFF=-1;const int N=100;int filenumber;struct FILEINFO/声明一个结构体类型(char name10;/文件名为字符串int start;/起始块号为整形int length;/文件长度为整形);FILEINFO file10;/定义结构体数组,file是结构体数组名,10为数组长度int FATN,freespace; /FAT 表和剩余空间/显示文件目录void printfmenu()/定义无参数返回值的printfmenu函数(int i;/定义变量i为整形printf(t 文件个数:%d n,filenumber
6、);/ 输出文件个数printf(t文件名起始块号文件长度n);/输出文件名,起始块号和文件长度for(i=0;ifilenumber;i+)(printf( %s %d %dn,,filei.start,filei.length);)/显示FAT表void printFAT()/定义无参数返回值的printFAT函数(int i;printf(t 空闲块数:%dn,freespace);printf(t-2 代表 FDF,-1 代表 FFFn);for(i=0;iN;i+)printf( No.%d %dn,i,FATi);) /搜索文件void search(char
7、*tmpname)int i;for(i=0;ifilenumber;i+)if(strcmp(,tmpname)=0)/比较插入文件名与已存在文件名是否相同printf(t 找到了 !n);printf(-t文件名起始块号文件长度n);printf( %s %d %dn,,filei.start,filei.length);)elseprintf(t不存在该文件!);)/搜索索引点void search2(int searchpoint)int i=0;int m;if(FATsearchpoint=0)printf(-t该点空缺,没有文件!);els
8、e if(FATsearchpoint=-1&FATsearchpoint-1=-2|FATsearchpoint=-2&FATsearchpoint+ 1=-1)(printf(t此处为系统空间!);)else if(FATsearchpoint=-1&FATsearchpoint+1=0)(printf(t 找到了 !此处的文件名为:%s,);)else if(FATsearchpoint!=0&FATsearchpoint+1!=-1)(for(m=searchpoint;m+)(if(FATm=-1)printf(t 找到了 !此处的文件名为:%s,filei.na
9、me);else(printf(找不到该文件!);)break;)else if(FATsearchpoint!=0&FATsearchpoint+1=-1)(printf(找到了 !此处的文件名为:%s,);)/写入文件void write(char *tmpname,int tmplength)(int last,i,j;strcpy(,tmpname);/ 复制文件名和文件块个数filefilenumber.length=tmplength;for(i=2;iN;i+)(if(FATi=0)(filefilenumber.star
10、t=i;/首个空闲块为文件开始块last=i;FATlast=FFF;break;for(i=1;itmplength;i+)(for(j=2;jN;j+)if(FATj=0)(FATlast=j;last=j;FATlast=FFF;break;)FATlast=FFF;/文件末存结束标记freespace-=tmplength;/ 改变空闲块个数 filenumber+;printf(文件名和长度:s %dn,tmpname,tmplength);)/插入记录void insert(char *tmpname,int insertpoint)(int i;int last,brpoint;
11、for(i=0;i=filelast.length)(printf(插入点溢出!);return;)brpoint=filelast.start; /brpoint记录当前文件扫描到的位置for(i=0;iinsertpoint;i+)(brpoint=FATbrpoint;)for(i=0;iN;i+)(if(FATi=0)(FATi=FATbrpoint;FATbrpoint=i; break;)filelast.length+;/改变空闲块个数与文件长度freespace-;printf(t 文件名和长度:%s %dn,tmpname,filelast.length); ) void m
12、ain()(int i;char tmpname10;/要写入文件名的字符长度 int tmplength;/要写入文件长度int m;/ 命令filenumber=0;/初始文件个数为 0 for(i=0;iN;i+)/ 初始化 FAT 表 (FATi=0;)FAT0=FDF;FAT1=FFF;freespace=98;while(true)(printf(n);printf(* 欢迎进 入 *n);printf(n);printf(n”);printf(0.退出n);printf(1.写入文件2.插入文件3.显示文件目录n);printf(4.显示FAT表5.搜索文件6.搜索索引点n)pr
13、intf(*printf(n);printf(t选择服务菜单:);scanf(%d”,&m);switch(m)(case 0: exit(0);case 1: printf(t输入要写入的文件名:);scanf(%s”,&tmpname);printf(t输入要写入的文件长度:);scanf(%d,&tmplength);write(tmpname,tmplength);/ 调用 write 函数 break;case 2: printf(t输入要插入的文件名:);scanf(%s,&tmpname);int insertpoint;printf(t输入要插入的点:);scanf(%d,&insertpoint);insert(tmpname,insertpoint);/ 调用插入函数 break;case 3: printfmenu();/ 调用 printfmenu 函数显示文件目录 break;case 4: printFAT();/ 调用 printFAT 函数显示 FAT 表 break;case 5: pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年沪科版选择性必修三物理下册阶段测试试卷
- 二零二五年度建筑废弃物资源化利用与木模板木方采购合同3篇
- 二零二五年度新能源汽车推广应用借款合同参考格式4篇
- 2025年度桥梁路面混凝土施工劳务合同范本4篇
- 2025年度农用拖拉机租赁与农田作业合同3篇
- 2025年度幕墙施工劳务分包合同施工质量监督与验收范本4篇
- 二零二五年度苗木新品种研发与推广合作合同3篇
- 2025年度旅游地产开发贷款担保合同4篇
- 二零二五年度厂房租赁与智慧城市建设合作合同范本3篇
- 护士长合同范本(2篇)
- GB/T 16288-2024塑料制品的标志
- 麻风病防治知识课件
- 干部职级晋升积分制管理办法
- TSG ZF003-2011《爆破片装置安全技术监察规程》
- 护理服务在产科中的应用课件
- 2024年代理记账工作总结6篇
- 电气工程预算实例:清单与计价样本
- VOC废气治理工程中电化学氧化技术的研究与应用
- 煤矿机电设备培训课件
- 高考写作指导议论文标准语段写作课件32张
- 2021年普通高等学校招生全国英语统一考试模拟演练八省联考解析
评论
0/150
提交评论