ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:195.28KB ,
资源ID:11736370      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11736370.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验七 文件结构.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验七 文件结构.docx

1、实验七 文件结构实习七 文件结构一、实习内容把文件的逻辑结构转换成存储结构,设计便于顺序存取和直接存取的文件存储结构。二、实习目的文件的结构是指文件中信息的构造方式,通常分成逻辑结构和存储结构两种。文件的逻辑结构是从用户的观点出发,研究用户概念中的信息组织方式,这时,把文件看成是若干个逻辑记录的集合。文件的存储结构是指文件中的信息在物理存储介质上的存放方法和组织关系,这时,把文件看成是相关物理块的有序集合。用户是按逻辑结构来生成和使用文件的,而文件系统必须按照存储设备的物理特性和用户对文件信息的存取方式来管理文件。所以,文件系统一个主要任务就是要在文件的逻辑结构和存储结构之间建立一个映射。本实

2、习要求学生模拟设计文件的存储结构,通过实习理解文件的逻辑结构、存储结构、存取方式之间的联系。三、实习题目第一题:模拟设计MS-DOS操作系统中磁盘文件的存储结构。提示:(1) 当用户对记录式文件采用顺序存以方式时,用户总是依次地访问一个个逻辑记录,即当访问了第I个记录后,下次总是访问第i+1个记录。所以,当用户采用顺序存取方式访问文件时,只要给出访问要求(读或写)而无需再指出要访问的记录号。为了适应顺序存取,文件的存储结构可采用顺序文件或链接文件。由于顺序文件必须占用连续的存储空间,为了提高存储空间的利用率,在用户按逻辑记录顺序访问文件的情况下,一般采用链接文件的结构。链接文件可以存放在不连续

3、的物理块中,使用链接字(又称指针)来指出文件中各个物理块之间的关联。在一般情况下,链接文件的第一个物理块号登记在文件目录中,每一块中设置一个链接字,指出链接文件的下一个物理块号,最后一块中的链接字内容为“0”,表示文件结束。链接文件结构如图7-1。图7-1 链接文件结构(2) 采用上述的链接文件结构,只有读出一个物理块信息后才能从链接字中得知下一个物理块号。所以,当用户要在文件中插入一些信息时,文件系统必须多次地请求启动磁盘读出信息才能做插入工作。MS-DOS操作系统对链接文件结构作了改进,它是把所有的链接指针集中在一起,存放在文件定位表FAT中。查找链接字时不必读出物理块信息可直接从FAT中

4、得到。其设计思想是:假定磁盘上共有N个物理块可供使用,FAT就有N项,初始化时为全“0”,表示对应的物理块均可使用,当要存放文件时,从FAT中寻找为“0”的项,其对应的物理块用来存放文件信息,把文件的链接指针(指出物理块号)登记在FAT中,文件的第一块块号登记在文件目录中。例如:图7-2 文件定位表FAT在MS-DOS中FAT的前两项用来记录盘的类型。第2项起表示盘的分配和链接情况,在上例中第3项为“0表示对应的第3块空闲。图7-2还指出了文件A依次存放在第2,4,20,21,45,46块中,指针为FFF时表示文件结束。可见,MS-DOS的FAT表起了两个作用:一是起到位示图的作用,可从中判别

5、哪些块被占用,哪些块是空闲的;二是指出了文件的链接情况。(3) 假定磁盘存储空间共有32个物理块,模拟设计文件定位表FAT。文件定位表可以用一个一维数组FAT031来定义,其中一个元素与一个物理块对应。当FATi=0时,表示第i块为空闲块;当FATi=FFF时,表示链接文件到第i块结束;当FATi0FATiFFF时,其值指示链接文件中下一个物理块号。(4) 假定磁盘上的每个物理块只能存放一个逻辑记录,设计一个程序把文件的逻辑结构模拟转换成MS-DOS的链接结构。用户要求保存一个已经在主存中的文件时,给出文件名和文件的逻辑记录长度及个数,对一个已经保存的文件,允许用户插入新记录。用键盘输入来模拟

6、用户的要求,输入信息为:“存” 文件名 逻辑记录长度 逻辑记录个数“插入” 文件名 逻辑记录号“插入”要求中的逻辑记录号是指在该记录后插入一个新记录。模拟程序的算法如图7-3。在设计的模拟程序中可不执行“逻辑记录存入物理块”的工作,而用显示文件目录表和FAT来代替。图7-3 构造链接文件的模拟算法(5) 可假设系统中已经有两个链接文件,其链接情况由FAT表指出(链接情况学生自定),现又要保存一个新文件,然后对已保存的文件插入一个新记录。运行你所设计的程序,观察其结果。第二题:模拟便于直接存取的索引文件结构。提示:(1) 有时用户希望不按逻辑记录顺序而直接访问文件中的任意一个逻辑记录。在MS-D

7、OS的链接结构中只需沿链查FAT表就可找到指定记录的物理地址。为了能更快地直接查找指定记录,可考虑另一种文件存储结构,即索引文件结构。索引文件像链接文件一样,文件的逻辑记录信息可存放在非连续的磁盘存储空间中。但这些存放逻辑记录的存储空间不是按链表的形式链接在一起的,而是采用索引表来指出逻辑记录存放的物理位置。假定把文件中的逻辑记录按次序1,2,3,4,编号,且约定一个物理块中存放一个逻辑记录,那么,索引表的格式根号图7-4。文件中的每一个逻辑记录在索引表中都有一个登记项,登记项指出逻辑记录号以及该记录存放在磁盘上的地址(可用物理块号表示),“最大记录号”表示文件中逻辑记录个数。一个用户建立多个

8、文件时,系统要为每个文件建立一张索引表,索引表的存放地址登记在用户文件目录表中。于是当用户要访问指定文件的某个记录时,系统就能直接查到该记录的物理位置。文件目录与索引表的关系如图7-4。图7-4 索引文件结构(2) 一般说来,索引表按记录顺序排列后,既有利于采用顺序存取方式访问文件,又便于采用直接存取方式访问文件。建立索引文件的过程是:寻找一些空闲物理块;逻辑记录存入这些物理块中;把逻辑记录与物理块的对应关系登记在索引表中。在模拟实习中可只模拟索引表的构造,要求把第一题中已经建立的若干个链接文件(它们的链接情况由FAT表指出)变换成索引文件的结构。请设计一个文件存储结构的转换程序,要求能显示转

9、换前的FAT表和转换后的索引表。四、相关数据结构及说明 1、定义链接文件数据结构以及文件定位表数组和空闲空间struct FILEINFO char name10;/文件名 int start; 文件存储开始位置 int length;/文件内容占据长度 ; FILEINFO file10;int FATN,freespace;五、源代码及注释#include#include#include#include#define FDF -1#define FFF -2 #define N 32int filenumber;struct FILEINFO char name10; int start;

10、 int length; ; FILEINFO file10;/文件结构体数组定义 int FATN,freespace;/FAT和空闲空间 /显示文件目录 void printfmenu() int i; printf(t文件个数:%d n,filenumber); printf(t文件名 起始块号 文件长度n); for(int i=0;ifilenumber;i+) printf(%s %d %d n,filei.name,filei.start,filei.length); /显示FAT表void printFAT() int i; printf(t空闲块数:%d n,freespac

11、e); printf(t-2代表FDF,-1代表FFFn); for(int i=0;iN;i+) printf( No.%d %d n,i,FATi); /搜索文件 void search(char *tmpname) for(int i=0;ifilenumber;i+) if(strcmp(filei.name,tmpname)=0) printf(找到该文件n); printf(t文件名 起始块号 文件长度n); printf( %s %d %d n,filei.name,filei.start,filei.length); else printf(不存在该文件n); /搜索索引点 v

12、oid search2(int searchpoint) int i=0; int m; if(FATsearchpoint=0) printf(该点空缺,没有文件n); else if(FATsearchpoint=-1&FATsearchpoint-1=-2|FATsearchpoint+1=-1) printf(此处为系统空间!n); else if(FATsearchpoint=-1&FATsearchpoint+1=0) printf(找到该文件,此处的文件名为:%s,filei.name); else if(FATsearchpoint!=0&FATsearchpoint+1!=-

13、1) for( m=searchpoint;m+) if(FATm=-1) printf(找到该文件,此处的文件名为:%s,filei.name); else printf(找不到该文件n); break; if(FATsearchpoint!=0&FATsearchpoint+1=-1) printf(找到该文件,此处的文件名为:%s,filei.name); /写入文件 void write(char *tmpname,int tmplength) int last,i,j; strcpy(filefilenumber.name,tmpname); filefilenumber.lengt

14、h=tmplength; for(i=2;iN;i+) if(FATi=0) filefilenumber.start=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,

15、int insertpoint) int i; int last,brpoint; for(i=0;i=filelast.length) printf(插入点溢出!); return; brpoint=filelast.start; for(int i=0;iinsertpoint;i+) brpoint=FATbrpoint; for(i=0;iN;i+) if(FATi=0) FATi=FATbrpoint; FATbrpoint=i; break; filelast.length+; freespace-; printf(文件名和长度:%s %dn,tmpname,filelast.le

16、ngth); int main() int i; char tmpname10; int tmplength; int m; filenumber=0; for(i=0;iN;i+) FATi=0; FAT0=FDF; FAT1=FFF; freespace=98; while(true) printf(n); printf(*欢迎进入*n); printf(n); printf( 0 退出n 1 写入文件n 2 插入文件n 3 显示文件目录n 4 显示FAT表n 5 搜索文件n 6 搜索索引点n); printf(*nn); printf(选择服务菜单:); scanf(%d,&m); sw

17、itch(m) case 0:exit(0); case 1:printf(输入要写入的文件名:);scanf(%s,&tmpname); printf(输入要写入的文件长度:);scanf(%d,&tmplength); write(tmpname,tmplength);break; case 2:printf(输入要插入的文件名:);scanf(%s,&tmpname); printf(输入要插入的点:); int insertpoint; scanf(%d,&insertpoint); insert(tmpname,insertpoint);break; case 3:printfmen

18、u();break; case 4:printFAT();break; case 5:printf(输入要搜索的文件名:);scanf(%s,&tmpname); search(tmpname);break; case 6:printf(输入要搜索的索引点:); int searchpoint; scanf(%d,&searchpoint); printf(输入要插入的点:);scanf(%d,&insertpoint); search2(searchpoint);break; printFAT(); 六、运行结果1、 题二运行结果2、题一运行结果 (5) 打印出初始的FAT表,运行第一题的程序得到的FAT表,以及转换成索引文件结构后的索引表。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1