实验六模拟文件系统.docx

上传人:b****5 文档编号:14871596 上传时间:2023-06-28 格式:DOCX 页数:14 大小:159.45KB
下载 相关 举报
实验六模拟文件系统.docx_第1页
第1页 / 共14页
实验六模拟文件系统.docx_第2页
第2页 / 共14页
实验六模拟文件系统.docx_第3页
第3页 / 共14页
实验六模拟文件系统.docx_第4页
第4页 / 共14页
实验六模拟文件系统.docx_第5页
第5页 / 共14页
实验六模拟文件系统.docx_第6页
第6页 / 共14页
实验六模拟文件系统.docx_第7页
第7页 / 共14页
实验六模拟文件系统.docx_第8页
第8页 / 共14页
实验六模拟文件系统.docx_第9页
第9页 / 共14页
实验六模拟文件系统.docx_第10页
第10页 / 共14页
实验六模拟文件系统.docx_第11页
第11页 / 共14页
实验六模拟文件系统.docx_第12页
第12页 / 共14页
实验六模拟文件系统.docx_第13页
第13页 / 共14页
实验六模拟文件系统.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验六模拟文件系统.docx

《实验六模拟文件系统.docx》由会员分享,可在线阅读,更多相关《实验六模拟文件系统.docx(14页珍藏版)》请在冰点文库上搜索。

实验六模拟文件系统.docx

实验六模拟文件系统

实验六模拟文件系统

操作系统试验

班级:

计科0801姓名:

韩伟伟学号:

08407106日期:

2011/6/15

实验六模拟实现文件系统

一.实验目的

通过模拟程序实现文件的建立、打开、删除、关闭、复制、读、写、查询等功能,了解文件系统实现的特点,掌握文件系统的各种功能实现方法。

二.实验属性

设计

三.实验内容

模拟实现文件系统问题是一个经典的关于文件的处理问题,包括:

实现文件的建立、打开、删除、关闭、复制、读、写、查询等功能。

设计思想如下:

1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。

2.文件物理结构可采用显式链接或其他方法。

3.磁盘空闲空间的管理可选择位示图

4.

5.

6.

五.实验报告

1.写出你编写的C++程序。

#include"stdio.h"

#include

#include

#include

#definegetpch(type)(type*)malloc(sizeof(type))

#defineNULL0

#defineUserNumber10

#defineUserFNumber10

#defineUserOFNumber5

structfname{

charfnamea[1];

intflag;

}fnameA[26]={'a',0,'b',0,'c',0,'d',0,'e',0,'f',0,'g',0,'h',0,'i',0,'j',0,'k',0,'l',0,

'm',0,'n',0,'o',0,'p',0,'q',0,'r',0,'s',0,'t',0,'u',0,'v',0,'w',0,'x',0,'y',0,'z',0};

structafd{

charopname[10];/*打开文件名*/

intflag;

charopfprotect[3];/*打开保护码*/

intrwpoint;/*读写指针*/

}AFD[UserOFNumber];/*用户打开的文件*/

typedefstruct{

charfname[10];/*用户文件名*/

intflag;/*文件存在标志*/

intfprotect[3];/*文件保护码r\w\t*/

intflength;

}ufd,UF[UserFNumber];/*用户文件*/

structmdf{

charuname[10];/*用户名*/

UFUdir;/*用户文件目录*/

}UFD[UserNumber];/*用户*/

voidintFSystem(){

inti,j,k,l;

strcpy(UFD[0].uname,"a");

strcpy(UFD[1].uname,"b");

strcpy(UFD[2].uname,"c");

strcpy(UFD[3].uname,"d");

strcpy(UFD[4].uname,"e");

strcpy(UFD[5].uname,"f");

strcpy(UFD[6].uname,"g");

strcpy(UFD[7].uname,"h");

strcpy(UFD[8].uname,"i");

strcpy(UFD[9].uname,"j");

for(i=0;i<10;i++){

for(k=0;k<5;k++){

doj=rand()%26;while(fnameA[j].flag);

strcpy(UFD[i].Udir[k].fname,fnameA[j].fnamea);

fnameA[j].flag=1;

UFD[i].Udir[k].flength=rand()%2048+1;

UFD[i].Udir[k].flag=1;

UFD[i].Udir[k].fprotect[0]=rand()%2;

UFD[i].Udir[k].fprotect[1]=rand()%2;

UFD[i].Udir[k].fprotect[2]=rand()%2;

}

for(j=0;j<26;j++)fnameA[j].flag=0;

}

for(l=0;l<5;l++){

strcpy(AFD[i].opname,"");

AFD[l].flag=0;

AFD[l].opfprotect[0]=0;

AFD[l].opfprotect[1]=0;

AFD[l].opfprotect[2]=0;

AFD[l].rwpoint=0;

}

}

voidOpen(inti){intl,k,n;

charfile[10];

for(l=0;l<5;l++){if(!

AFD[l].flag)break;}

printf("请输入你想打开的文件名:

");

scanf("%s",file);

for(n=0;n<5;n++)if(!

strcmp(AFD[n].opname,file)&&AFD[n].flag)

{printf("hefilehadopened!

\n",file);return;}

for(k=0;k<10;k++)if(!

strcmp(UFD[i].Udir[k].fname,file)&&UFD[i].Udir[k].flag)

{strcpy(AFD[l].opname,UFD[i].Udir[k].fname);AFD[l].opfprotect[0]=UFD[i].Udir[k].fprotect[0];

AFD[l].opfprotect[1]=UFD[i].Udir[k].fprotect[1];

AFD[l].opfprotect[2]=UFD[i].Udir[k].fprotect[2];

AFD[l].flag=1;

printf("文件已打开!

\n");

return;}

printf("文件不存在!

\n");

return;

}

voidCreate(inti){intk;

for(k=0;k<10;k++){if(!

UFD[i].Udir[k].flag)break;}

if(k>=10){printf("一个用户不能拥有超过10个文件\n\n");return;}

printf("请输入你想创建的文件名:

");

scanf("%s",UFD[i].Udir[k].fname);

printf("请输入文件长度:

");

scanf("%d",&UFD[i].Udir[k].flength);

printf("只读?

(1yes,0no):

");

scanf("%d",&UFD[i].Udir[k].fprotect[0]);

printf("可写?

(1yes,0no):

");

scanf("%d",&UFD[i].Udir[k].fprotect[1]);

printf("可执行?

(1yes,0no):

");

scanf("%d",&UFD[i].Udir[k].fprotect[2]);

UFD[i].Udir[k].flag=1;

return;}

voidDelete(inti){charfile[10];intk;

printf("请输入你想删除的文件名:

");

scanf("%s",file);

for(k=0;k<10;k++){

if(UFD[i].Udir[k].flag&&!

strcmp(UFD[i].Udir[k].fname,file))

{

printf("文件已删除!

\n");

UFD[i].Udir[k].flag=0;break;}

elseif(!

UFD[i].Udir[k].flag&&!

strcmp(UFD[i].Udir[k].fname,file))

printf("文件不存在!

\n");

}

return;}

voidRead(){intl;charfile[10];

printf("请输入你想读的文件:

");

scanf("%s",file);

for(l=0;l<5;l++)if(!

strcmp(AFD[l].opname,file)&&AFD[l].flag)

if(AFD[l].opfprotect[0]){printf("thefilehasread.\n");return;}else{printf("cannotread!

\n");return;}

if(l>=5)printf("文件尚未打开,请先打开文件\n");

return;}

voidWrite(){

intl;charfile[10];

printf("请输入你想写的文件:

");

scanf("%s",file);

for(l=0;l<5;l++)if(!

strcmp(AFD[l].opname,file)&&AFD[l].flag)

if(AFD[l].opfprotect[1]){printf("thefilehaswritten.\n");return;}else{printf("cannotwrite!

\n");return;}

if(l>=5)printf("文件尚未打开,请先打开文件\n");

return;}

voidprintUFD(inti){intk;

printf("主文件目录:

\n",UFD[i].uname);

printf("用户名\t文件名\t可读可写可执行\t文件长度\n");

for(k=0;k<10;k++){

if(UFD[i].Udir[k].flag)

printf("%s\t%s\t%d%d%d\t\t%dB\n",UFD[i].uname,UFD[i].Udir[k].fname,UFD[i].Udir[k].fprotect[0],

UFD[i].Udir[k].fprotect[1],UFD[i].Udir[k].fprotect[2],UFD[i].Udir[k].flength);

}

}

voidprintAFD(inti){intl,k;

if(!

AFD[0].flag&&!

AFD[1].flag&&!

AFD[2].flag&&!

AFD[3].flag&&!

AFD[4].flag)

{

printf("当前没有运行的文件!

\n");

return;

}

else

{

printf("运行文件目录:

\n");

printf("文件名\t可读可写可执行\n");

for(l=0;l<5;l++)

{

for(k=0;k<10;k++)

{

if(!

strcmp(UFD[i].Udir[k].fname,AFD[l].opname)&&UFD[i].Udir[k].flag&&AFD[l].flag){break;}

elsecontinue;

}

if(!

strcmp(UFD[i].Udir[k].fname,AFD[l].opname)&&UFD[i].Udir[k].flag&&AFD[l].flag){printf("%s\t%d%d%d\n",AFD[l].opname,AFD[l].opfprotect[0],AFD[l].opfprotect[1],AFD[l].opfprotect[2]);}

}

}

}

voidClose(){intl;

charfile[10];

printf("请选择文件:

");

scanf("%s",file);

for(l=0;l<5;l++)

if(!

strcmp(AFD[l].opname,file)&&AFD[l].flag){AFD[l].flag=0;printf("thefilehasclose\n");return;}

if(l>=5)printf("文件打开失败!

\n");

return;}

voidmain(){inti,n=0;

charm[10];

charlogin[10];

intFSystem();

printf("欢迎使用\n");

printf("1.本系统模拟文件管理2.系统已初始化10个用户,\n用户名分别是a~j,每个用户已分配五个文件\n");

printf("**本系统的命令包括如下:

\n");

printf("**创建文件(create)\n");

printf("**删除文件(delete)\n");

printf("**打开文件(open)\n");

printf("**关闭文件(close)\n");

printf("**读取文件(read)\n");

printf("**编写文件(write)\n");

printf("**显示文件目录(printufd)\n");

printf("**显示打开文件目录(dir)\n");

printf("**退出(exit)\n");

lgin:

printf("请输入用户名(a~j):

");

scanf("%s",login);

if(!

strcmp(login,"exit"))return;

for(i=0;i<10;i++){if(!

strcmp(UFD[i].uname,login))break;}

if(i>=10){printf("该用户名不存在!

");gotolgin;}

printUFD(i);

for(;n!

=1;){

printf("请输入命令:

");

scanf("%s",&m);

if(strcmp(m,"create")==0)Create(i);

elseif(strcmp(m,"delete")==0)Delete(i);

elseif(strcmp(m,"open")==0)Open(i);

elseif(strcmp(m,"close")==0)Close();

elseif(strcmp(m,"read")==0)Read();

elseif(strcmp(m,"write")==0)Write();

elseif(strcmp(m,"printufd")==0)printUFD(i);

elseif(strcmp(m,"dir")==0)printAFD(i);

elseif(strcmp(m,"exit")==0)n=1;

elseprintf("出错\n");

}

printf("Saving....\n");

printUFD(i);

getch();

return;

}

用户登录时的界面如下:

用户对此模拟系统进行各项操作的界面如下:

2.描述文件系统的实现原理

本系统是模拟实现多用户多目录的文件系统(10个用户),在系统出现登录后,输入用户名,在用户登录系统后,可建立文件卷,将用户输入的文件保存在指定的文件中。

系统的命令与其命令的具体实现,此模拟系统共提供了9条基本命令,并根据命令的含义与要求,用C++编程来完成所有具体操作。

该系统可以模拟完成用户的登陆和验证,列出文件和目录,新建目录,改变目录,创立和编写文件,删除文件和退出系统等功能。

3.总结体会

通过本次试验使我对文件系统的理解更深了一个层次,全面了解了计算机是如何管理文件的。

另一方面,通过对文件系统的设计也使我对C++的编程能力有了提高。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2