操作系统课程设计模拟磁盘文件管理的程序_第1页
操作系统课程设计模拟磁盘文件管理的程序_第2页
操作系统课程设计模拟磁盘文件管理的程序_第3页
操作系统课程设计模拟磁盘文件管理的程序_第4页
操作系统课程设计模拟磁盘文件管理的程序_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中南林业科技大学操作系统课程设计课程题目:模拟磁盘文件管理的程序姓名:学号:专业:计算机科学与技术年级:2006计算机科学学院2008年 11月模拟磁盘文件管理的程序课程设计内容 自定义磁盘文件管理的数据结构; 能够自由创建、修改、删除文件; 文件具有一定自定义的属性; 能够显示当前系统文件的状态。二、 课程设计的数据结构说明程序中定义了两个类: class file/ 文件类private:char name10; / 文件名int tag; /删除标记 1: 已删 0: 未删public:file( ) char *getname( )return name; /获取文件名int gett

2、ag( )return tag; /获取删除标记int getlength() return length; /int getblocknum() return blocknum; / int getblocksum1()return blocksum1; / int getblocksum2()return blocksum2; /获取文件大小 磁盘块数 磁盘块号的始点 磁盘块号的终点int length,blocknum,blocksum1, blocksum2;void setname(char na ) strcpy(name,na); /设置文件名void delwenjian()

3、tag=1; / 设置删除标记 1: 已删 0: 未删void creatfile(char *na,int L,int num,int s1,int s2) / 创建文件 void deltefile(char *na) tag=1; strcpy(name,na); /删除文件void disp( )/输出文件信息class fdatabase / 文件库类 private:int top; / 文件记录指针file f50;public:fdatabase()top=-1; / 构造函数int search(char *fname)/ 按文件名查找 int creatfile(char

4、*na,int L,int num,int s1,int s2)/ 是否存在创建文件时先查找int deltefile(char *na)/ 删除文件时先查找是否存在 void disp() / 输出所有文件信息;三、课程设计的模板说明1、初始化,建立文件系统输入磁盘大小(G),每个盘块大小(M ),自动建立位示图,位示图字长定为32位输出位示图的行数,以及行号、列号与磁盘块号的转换公式(都从0 开始编号) 。2、循环选择执 行以下功能1、存储文件 输入建立的文件名和文件大小,如果该文件名已经存在,则输出不能建立的信息 否则计算所需的磁盘块数为其分配足够多的磁盘块,并记录下来 输出所占用的磁盘

5、块号2、删除文件 输入要删除的文件名,如果该文件名不存在,则输出删除错误信息,否则收回该 文件所占用的磁盘块删除该文件名3、显示位示图情况 显示位示图的情况 显示剩余磁盘块的数目4、显示文件列表显示文件名,文件大小,占用的磁盘块数目和磁盘块号四、课程设计的源代码#include#include #include#include#include int i=0,j=0,sum=0,tt=0,r,ii,k,g,m;int a10032;class file/ 文件类private:int no; / 文件编号char name10; / 文件名public:int tag; / 删除标记 1: 已

6、删 0: 未删file( ) char *getname( )return name; / int gettag( )return tag; / int getno() return no; / int getlength() return length;获取姓名获取删除标记获取文件编号/获取文件大小int getblocknum() return blocknum; / int getblocksum1()/ 磁盘块号的始点磁盘块数 return blocksum1; int getblocksum2()/ 磁盘块号的终点 return blocksum2;int length; / 文件大

7、小int blocknum;/ 盘块数int blocksum1;/ 所占盘块号的始点int blocksum2;/ 所占盘块号的终点void setname(char na ) /设置文件名strcpy(name,na);void delwenjian() tag=1; / 设置删除标记 void creatfile(char *na,int L,int num,int s1,int s2) / tag=0;length=L; blocknum=num; blocksum1=s1;blocksum2=s2;strcpy(name,na);blocknum=length/m; / if(len

8、gth%m!=0) / blocknum=blocknum+1;cout 所需磁盘块数: if(sum+blocknum)=32) / for(;j(sum+blocknum);j+)aij=1;sum=sum+blocknum; /else1: 已删 0: 未删创建文件盘块数 =文件大小 / 盘块大小 盘块数取上整blocknumendlendl;所有盘块数只占用一行,直接赋值再进行下面文件的盘块数累加 /for(;j32;j+)aij=1;i=i+1;for(j=0;j(sum+blocknum)-32;j+) aij=1;sum=sum+blocknum-32;tt=tt+blocknu

9、m; / cout 所占磁盘块号:占用多行,先赋值整行/ 再进行剩余项赋值输出文件所占用的盘块号tt-blocknum to tt-1endl;blocksum1=tt-blocknum;blocksum2=tt-1;void deltefile(char *na) / 删除文件 tag=1;strcpy(name,na);void disp( )/ 输出文件信息coutsetw(8)namesetw(10)lengthsetw(18)blocknumsetw(12)blocksum1 to blocksum2endl;class fdatabase / 文件库类 private:int to

10、p; / 文件记录指针file f50;public:fdatabase() / 构造函数top=-1;int search(char *fname)/ 按文件名查找for ( ii=0;ii=top;ii+) if (strcmp(fii.getname(),fname)=0 & fii.tag=0)return 0;return 1;int creatfile(char *na,int L,int num,int s1,int s2)/创建文件时先查找是否存在 int p;p=search(na);if (p=1) top+; ftop.creatfile(na,L,num,s1,s2);

11、return 1;elsecout ! return 0; int deltefile(char *na)/int b,p,x=0,n1,n2,q1,q2,t; p=search(na); if (p=0) / / fii.tag=1; b=fii.length/m; / if(ii=0) / for(k=0;kb;k+) axk=0;该文件已存在 , 不能创建 !nn;删除文件时先查找是否存在若文件存在进行删除文件赋值盘块数 =当前文件大小 / 盘块大小 对第一个删除文件进行赋值elsen1=(fii-1.blocksum2+1)/32; /n2=(fii.blocksum2+1)/32;

12、/ 示跨行q1=(fii-1.blocksum2+1)-n1*32; / q2=(fii.blocksum2+1)-n2*32; / t=n2-n1;if(t=0) / 一行for(k=q1;k=0;t-,x+)/for(k=0;k32;k+)axk=0;x=n2; / for(k=0;kb-(t-1)*32;k+) axk=0;else / x=n1; for(k=q1;k0;t-,x+)/for(k=0;k32;k+)axk=0;x=n2; /被查找的文件之前文件所占用的盘块数 /32 , / 大于 0 表示跨行所有文件所占用的盘块数 /32 ,大于 0表当前文件的开始盘块号用于跨行后计算

13、盘块号若 n2 与 n1 相等,表明当前所有被占用盘块在同前面所占用的盘块数是 32 倍数 当前文件赋值 循环进行整行赋值对剩余项赋值对当前文件前几项赋值中间整行赋值最后剩余项赋值for(k=0;k(fii.blocksum2+1)-t1*32;k+) axk=0; return 1; elsecout 该文件不存在 ;return 0;void disp() / 输出所有文件信息for (int i=0;i=top;i+)if(fi.tag=0)fi.disp();void bit_map(int I)int s=0;cout-endl;for(int p=0;pI;p+)for(int q

14、=0;q32;q+) coutapq ; coutendl;out -endl;for(int p1=0;p1I;p1+)for(int q1=0;q132;q1+)if(ap1q1=1)s=s+1;s=(g*1024)/m-s;cout 剩余盘块数 :sendl;void main() int I,l,b,i,j,ss1,ss2,sum=0;char fname20;fdatabase p;file w;cout tt*n;cout tt*cout tt*cout tt*n;*n; 初始化,建立文件系统*n;cout tt*n;cout g; coutendl; cout m;coutend

15、l;I=(g*1024)/(32*m);for( i=0;iI;i+)for( j=0;j32;j+)aij=0;coutbit_map(I);coutcout tt*n;cout tt*cout tt*cout tt*cout tt*cout tt*cout tt*cout tt*char choice;while(choice!=0)cout tt*n; cout tt*n;cout tt*文 件 管 理 系 统cout tt* *n;cout tt*n;建立的位示图为: endl;行数: Iendl;*n;行号、列号与磁盘块号的转换公式为:磁盘块号二行号*32+列号行号=磁盘块号/32列

16、号=磁盘块号%32*n;*n;*n;*n;*n;*n;*n;cout ttt1 存 储 文 件 nnttt2 删 除 文 件 nnttt3 显示位示图情况 nnttt4显示文件列表 endl;cout choice;coutendl;switch (choice)case 1:cout fname;coutendl; / 创建文件前,先查找是否有同名文件存在 int q;q=p.search(fname);if (q=0) cout ! 该文件已存在 , 不能创建 !nn; break;cout l;coutg*1024)cout ! 文 件 大 小 超 过 磁 盘 最 大 容 量 , 无 法

17、 进 行 分配!e ndl;break; p.creatfile(fname,l,b,ss1,ss2);break;case 2:cout fname;coutendl; q=p.search(fname);if (!q=0)cout ! 该文件不存在,无法删除 !nn break;p.deltefile(fname);break;case 3:cout tt* 显 示 位 示 图 如 下*n;coutendl;bit_map(I);break;case 4:cout tt*文件列表如下*n;cout -endl;coutvsetw(10)vv文件名setw(15)vv文件大小(MB)vset

18、w(15)v所占盘 块数setw(15)所占盘块号endl;p.disp();coutendl;break;default:cout 输入错误,请从新输入: nn;break;五、课程设计程序运行结果1、初始化,建立文件系统(1)用户根据提示输入磁盘大小( GB )与每个盘块大小( MB );(2) 程序首先根据用户输入的磁盘大小( GB)与每个盘块大小(MB),自动建立位示图, 即初始化位示图,位示图每一行长度固定为 32 位(即列固定为 32);位示图中每一位表示 一个盘块,取值 0 和 1 分别表示空闲和占用。初始化的位示图应全为 0;3)程序再输出位示图的剩余盘块数,行数,以及行号、列

19、号与磁盘块号的转换公式(行列皆从0开始编号);这样,初始化,建立文件系统完成。运行结果:2、选择执行:存储文件,删除文件,显示位示图情况,显示文件列表【显示文件管理系统列表】显示文件系统管理列表,并提示输入信息1 4。用户输入 文件操作命令1 (存储文件),2 (删除文件)、3 (显示位示图情况)、4 (显示文件列表);格式如下:键入1,创建文件名为fname,大小为L ( MB )的文件;键入2,删除文件名为fname的文件;键入3,显示位示图情况;键入4,显示所有文件信息。运行结果:【存储文件】用户输入文件操作命令是1(存储文件)。系统提示你输入你要建立的文件名和文件大小,如果该文件名已经

20、存在,则系统提示输出不能建立此文件的信息,否则计算所需的磁盘 块数和所占用的磁盘块号,并输出结果。相应的在位示图上,因为位示图是矩阵,可以 用数组存储,根据所占用的磁盘块号和公式:磁盘块号=行号*32+列号行号=磁盘块号/32列号=磁盘块号 32计算出文件占用的磁盘块在位示图上的位置,现在是创建文件,所以将位示图该位置上的二进制数置1表示已分配出去。分别创建名为II,ZZ和mm三个文件,文件大小分别为 224MB,320MB和56MB。| c:,1- *F: ososile BaikageVDebiLgVfile- eze*-|n| x请输入选择项:1Jk请输入文件名:11请输入文件大小血:224所需磁盘块数:28所占磁盘块号:0 to27请输入选择项:13请输入文件名:ZZ请输入文件大小冊:320所需磁盘块数:40所占磁盘块号:28 to67请输入选择项:13请输入文件名=EE请输入文件大小血:56所需磁盘块数:7所占磁盘块号:68 to| 74-J n| x此时对应的位示图如下:匕胞 *F:ososile BajiageVDebiigVflie. exe11111111111111111111111111111111111111111111111111111111

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论