人人范文网 范文大全

操作系统课程设计++模拟磁盘文件管理的程序

发布时间:2020-03-03 01:16:12 来源:范文大全 收藏本文 下载本文 手机版

中南林业科技大学

操作系统课程设计

课程题目:模拟磁盘文件管理的程序

姓名: 学号:

专业: 计算机科学与技术 年级:

2006

计算机科学学院

2008年11月 模拟磁盘文件管理的程序

一、课程设计内容

⑴ 自定义磁盘文件管理的数据结构; ⑵ 能够自由创建、修改、删除文件; ⑶ 文件具有一定自定义的属性; ⑷ 能够显示当前系统文件的状态。

二、课程设计的数据结构说明

程序中定义了两个类: cla file//文件类 {private: char name[10]; //文件名 public: int tag; //删除标记 1:已删 0:未删 file( ){ } char *getname( ){return name;} //获取文件名

int gettag( ){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(){ 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( )//输出文件信息 cla fdatabase //文件库类 { private: int top; //文件记录指针 file f[50]; public: fdatabase(){top=-1;} //构造函数 int search(char *fname)//按文件名查找

int creatfile(char *na,int L,int num,int s1,int s2)//创建文件时先查找是否存在

int deltefile(char *na)//删除文件时先查找是否存在 void disp() //输出所有文件信息 };

三、课程设计的模板说明

1、初始化,建立文件系统

输入磁盘大小(G),每个盘块大小(M),自动建立位示图,位示图字长定为32位

输出位示图的行数,以及行号、列号与磁盘块号的转换公式(都从0开始编号)。

2、循环选择执行以下功能

1、存储文件

输入建立的文件名和文件大小,如果该文件名已经存在,则输出不能建立的信息否则计算所需的磁盘块数

为其分配足够多的磁盘块,并记录下来 输出所占用的磁盘块号

2、删除文件

输入要删除的文件名,如果该文件名不存在,则输出删除错误信息,否则收回该文件所占用的磁盘块 删除该文件名

3、显示位示图情况

显示位示图的情况 显示剩余磁盘块的数目

4、显示文件列表

显示文件名,文件大小,占用的磁盘块数目和磁盘块号

四、课程设计的源代码

#include #include #include #include #include int i=0,j=0,sum=0,tt=0,r,ii,k,g,m; int a[100][32]; cla file//文件类 {private: int no; //文件编号

char name[10]; //文件名 public: int tag; //删除标记 1:已删 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; //文件大小

int blocknum;//盘块数

int blocksum1;//所占盘块号的始点

int blocksum2;//所占盘块号的终点

void setname(char na[ ] ) //设置文件名

{strcpy(name,na);} void delwenjian(){ tag=1; }//设置删除标记 1:已删 0:未删

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(length%m!=0) //盘块数取上整 blocknum=blocknum+1; cout

for(;j

a[i][j]=1; i=i+1; for(j=0;j

{

a[i][j]=1; } sum=sum+blocknum-32; } tt=tt+blocknum; //输出文件所占用的盘块号

cout

{

for ( ii=0;ii

{ if (strcmp(f[ii].getname(),fname)==0 && f[ii].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++;

f[top].creatfile(na,L,num,s1,s2);

return 1;}

else

{cout

return 0; } } int deltefile(char *na)//删除文件时先查找是否存在

{int b,p,x=0,n1,n2,q1,q2,t; p=search(na); if (p==0) //若文件存在

{ //进行删除文件赋值

f[ii].tag=1; b=f[ii].length/m; //盘块数=当前文件大小/盘块大小

if(ii==0) // 对第一个删除文件进行赋值

for(k=0;k

a[x][k]=0;

else{ n1=(f[ii-1].blocksum2+1)/32; //被查找的文件之前文件所占用的盘块数

/32, //大于0表示跨行

n2=(f[ii].blocksum2+1)/32; //所有文件所占用的盘块数/32,大于0表示跨行

q1=(f[ii-1].blocksum2+1)-n1*32; // 当前文件的开始盘块号 q2=(f[ii].blocksum2+1)-n2*32; // 用于跨行后计算盘块号 t=n2-n1; if(t==0) //若n2与n1相等,表明当前所有被占用盘块在同一行

for(k=q1;k

a[n2][k]=0;

else { if((f[ii-1].blocksum2+1)%32==0) //前面所占用的盘块数是32倍数

{ x=x+n1; //当前文件赋值

for(;t-1>=0;t--,x++) //循环进行整行赋值

for(k=0;k

a[x][k]=0;

x=n2; //对剩余项赋值

for(k=0;k

a[x][k]=0;

} else //对当前文件前几项赋值

{ x=n1;

for(k=q1;k

a[x][k]=0; x=x+1; int t1=t;

for(;t-1>0;t--,x++) //中间整行赋值

for(k=0;k

a[x][k]=0;

x=n2; //最后剩余项赋值

for(k=0;k

a[x][k]=0;

}

} return 1; } } else

{cout

return 0;}

} void disp() //输出所有文件信息 { for (int i=0;i

if(f[i].tag==0)

f[i].disp(); } }; void bit_map(int I) { int s=0; cout

cout

out>g; cout>m; cout

a[i][j]=0;

cout

cout

cout

存 储 文 件\\n\\n\\t\\t\\t2

删 除 文 件 \\n\\n\\t\\t\\t3 显示位示图情况 \\n\\n\\t\\t\\t4 显示文件列表\"> choice; cout

case \'1\':

cout

cin>>fname;

cout

int q; q=p.search(fname);

if (q==0)

{ cout

break; }

cout

cin>>l;

cout

if(l>g*1024)

{cout

break;}

p.creatfile(fname,l,b,1,2);

break;

case \'2\':

cout

cin>>fname;

cout

q=p.search(fname);

if (!q==0)

{

cout

break;

} p.deltefile(fname);

break; case \'3\':

cout

bit_map(I);

cout

break;

case \'4\': cout

p.disp();

cout

break; default:

cout

break; } } }

五、课程设计程序运行结果

1、初始化,建立文件系统

(1)用户根据提示输入磁盘大小(GB)与每个盘块大小(MB);

(2)程序首先根据用户输入的磁盘大小(GB)与每个盘块大小(MB),自动建立位示图,即初始化位示图,位示图每一行长度固定为32位(即列固定为32);位示图中每一位表示一个盘块,取值0和1分别表示空闲和占用。初始化的位示图应全为0;

(3)程序再输出位示图的剩余盘块数,行数,以及行号、列号与磁盘块号的转换公式 (行列皆从0开始编号);

这样,初始化,建立文件系统完成。运行结果:

2、选择执行:存储文件,删除文件,显示位示图情况,显示文件列表 【显示文件管理系统列表】显示文件系统管理列表,并提示输入信息1——4。用户输入文件操作命令1(存储文件),2 (删除文件)、3(显示位示图情况)、4(显示文件列表);

格式如下:键入1,创建文件名为fname,大小为L(MB)的文件;

键入2,删除文件名为fname的文件;

键入3,显示位示图情况;

键入4,显示所有文件信息。

运行结果:

【存储文件】

用户输入文件操作命令是1(存储文件)。系统提示你输入你要建立的文件名和文件大小,如果该文件名已经存在,则系统提示输出不能建立此文件的信息,否则计算所需的磁盘块数和所占用的磁盘块号,并输出结果。相应的在位示图上,因为位示图是矩阵,可以用数组存储,根据所占用的磁盘块号和公式:

磁盘块号=行号*32+列号 行号=磁盘块号/32

列号=磁盘块号%32 计算出文件占用的磁盘块在位示图上的位置,现在是创建文件,所以将位示图该位置上的二进制数置1,表示已分配出去。

分别创建名为ll,zz和mm三个文件,文件大小分别为224MB,320MB和56MB。

此时对应的位示图如下:

文件列表如下:

若再创建一个已经创建过的文件,则显示如下信息:

若创建的文件大小超过磁盘的最大容量,则显示如下信息:

【删除文件】

用户输入文件操作命令是2 (删除文件) 。系统提示你输入要删除的文件名,如果该文件名不存在,则输出删除出错信息。在位示图上,根据所占用的磁盘块号和公式:

磁盘块号=行号*32+列号 行号=磁盘块号/32 列号=磁盘块号%32 计算出文件占用的磁盘块在位示图上的位置,现在是删除文件,所以将位示图该位置上的二进制数置0,表示收回该文件所占用的磁盘块。 删除第二个文件zz,结果如下:

则相应的位示图和文件列表变为:

若删除一个不存在的文件,则显示如下信息:

【显示位示图情况】

如果用户输入文件操作命令是我wst() (显示位示图情况),系统输出此时位示图的情况,状态位为\'0\'表示对应盘块空闲,状态位为\'1\'表示该盘块已被分配出去。系统再显示剩余磁盘块的数目。

以下是删除zz文件,创建xx后和创建xx后,删除ll的位示图:

【显示文件列表】

如果用户输入文件操作命令是disp()(显示所有文件情况),系统会显示所有文件的文件名,文件大小,占用的盘块数和盘块号。

以下是删除zz文件,创建xx后和创建xx后,删除ll显示的文件列表:

操作系统课程设计磁盘调度算法

操作系统课程设计,磁盘调度算法

操作系统实习报告(磁盘文件操作)

操作系统课程设计文件管理

操作系统课程设计

操作系统课程设计

操作系统课程设计

操作系统课程设计

操作系统课程设计

操作系统课程设计

操作系统课程设计++模拟磁盘文件管理的程序
《操作系统课程设计++模拟磁盘文件管理的程序.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档