文件操作与管理.docx
- 文档编号:9744266
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:28
- 大小:248.82KB
文件操作与管理.docx
《文件操作与管理.docx》由会员分享,可在线阅读,更多相关《文件操作与管理.docx(28页珍藏版)》请在冰豆网上搜索。
文件操作与管理
《操作系统》
课程设计报告
任务名称:
文件操作与管理
指导教师:
专业:
班级:
学生姓名:
学号:
完成日期:
一、《操作系统》课程设计的目的与要求
1、目的
随着社会信息量的不断增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。
因此,文件管理是操作系统的一个极为重要的组成部分。
学生应独立地用C语言(或其它程序设计语言)编写和调试一个简单的文件系统,模拟文件管理的工作过程。
从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。
2、要求
(1)设计一个有n个用户的文件系统,每个用户最多可保存m个文件。
(2)限制用户在一次运行中只能打开l个文件。
(3)系统应能检查输入命令的正确性,出错要显示出错原因。
(4)对文件必须设置保护措施,如只能执行,允许读、允许写等。
在每次打开文件时,根据本次打开的要求,再次设置保护级别,即可有二级保护。
(5)对文件的操作至少应有下述几条命令:
creat建立文件。
delete删除文件。
open打开文件。
close关闭文件。
read读文件。
write写文件。
二、简述课程设计内容、主要功能和实现环境
(1)本任务设计一个10个用户的文件系统,每个用户最多可保存10个文件,一次运行中用户可打开5个文件。
(2)程序采用二级文件目录,即设置主文件目录(MFD)和用户文件目录(UFD)。
前者应包含文件主(即用户)及他们的目录区指针;后者应给出每个文件主占有的文件目录,即文件名,保护码,文件长度以及他们存放的位置等。
另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。
(3)为了便于实现,简化对文件的读写操作,在执行读写命令时,只修改读写指针,并不进行实际文件的读写操作。
环境:
vc++6.0
三、任务的分析、设计、实现和讨论
1、任务的分析
(1)因系统小,文件目录的检索使用了简单的线性搜索,而没有采用Hash等有效算法。
(2)文件保护简单实用了三位保护码,对应于允许读、允许写和运行执行,如下所示:
111
允许写允许读允许执行
如对应位为0,则不允许。
(3)程序中使用的主要数据结构如下:
主文件目录和用户文件目录
打开文件目录
(4)程序框图如图所示。
2、任务的设计与实现(分别给出系统总控和本人负责实现的算法流程图与说明)
1.整个程序运行过程如下:
输入用户名—>在MFD中查找—>显示UFD文件链表—>初始化AFD运行文件表
—>输入操作命令—>执行操作命令—>保存文件目录—>打印文件目录—>结束
2.voidCreate()创建一个文件
选择CREATE命令后,查看该用户的UFD链表内是否还有空闲结点:
(1)若有则设置该结点的内容,然后打开、修改AFD;
(2)若无则报错并退出。
(3)
3.voidRead()读一个文件
读文件的关键是保护码的判断。
选择了READ命令后,输入需要读的文件名,在UFD中搜索是否有该文件名:
(1)若有,但该文件没被打开,则报错;
(2)若有,且已被打开,此处要分两种情况:
●如果保护码的读位为“0”,则不能对该文件进行读操作。
●否则,就通过文件号来读文件,即通过AFD中的point指针来查找该文件。
(3)
4.VoidNowshow()显示当前用户目录
程序运行结果
3操作过程和结果分析
用户验证
创建文件
写文件
读文件
显示当前用户目录
关闭与删除
更改用户
结束
四、《操作系统》课程设计小结(收获、不足与建议)
这次实验是写一个控制用户和用户目录下的文件的管理的程序,要求虽然很简单,但实际上要写出来其实需要很多知识,对于一个刚入门的人来说还是很有难度的,虽然项目是小组完成,但实际上还是很有难度,每个人对项目的理解不同,所以要整合程序也是一个难题,每个人只负责一小块内容,但是为了默契配合,必须在小组中进行大量的交流,但是难度也意味着收获,本次项目的过程让我对C类语言进一步理解,也让我自己了解到自己还需要学习很多很多,对于这次的项目,我们小组做的程序很好的满足了要求,但是容错能力比较差,输入的参数需要正确,保存的内容也极其有限,在我看来,我们小组还是很出色的,毕竟在那么短时间内基本完成了项目要求。
5、附录(主要源程序和运行结果的清单)
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
stringa[10]={"a","b","c","d","e","f","g","h","i","j"};
stringcommand[9]={"CREATE","DELETE","OPEN","CLOSE","READ","WRITE","CHANGE","NOWSHOW","BYE"};
structUFD
{
stringfilename;
intpro[3];
intcodel;
UFD*next;
};
structMFD
{
stringusername;
UFD*file;
MFD*next;
};
structAFD
{
intfilenum;
charfilepro[3];
UFD*point;
AFD*next;
};
AFD*openfile=NULL;
MFD*user=NULL;
MFD*thisuser;//当前用户
voidinit()//初始化函数
{
intx=0;
for(inti=0;i<10;i++)
{
MFD*p;
p=newMFD;
p->username=a[x];
UFD*fhead=NULL;
for(intj=0;j<10;j++)
{
UFD*q;
q=newUFD;
q->filename="******";
for(inta=0;a<3;a++)
{q->pro[a]=0;}
q->codel=0;
q->next=fhead;
fhead=q;
p->file=fhead;
if(j==9)//变成循环链表
{
UFD*r=fhead;
while(r->next!
=NULL)
{r=r->next;}
r->next=fhead;
}
}
p->next=user;
user=p;
x++;
}
//AFD的初始化
for(intk=0;k<5;k++)
{
AFD*f;
f=newAFD;
f->filenum=5-k;
for(intj=0;j<3;j++)
{f->filepro[j]=0;}
f->point=NULL;
f->next=openfile;
openfile=f;
if(i==4)//打开文件链表设为循环链表
{
AFD*p=openfile;
while(p->next!
=NULL)
{p=p->next;}
p->next=openfile;
}
}
}
intcheckUser(stringusername)
{
MFD*p;
for(p=user;p!
=NULL;p=p->next)
{
if(p->username==username){break;}
}
if(p!
=NULL)
{thisuser=p;return1;}
else{return0;}
}
voidshow()
{
cout<<"YOURFILEDIRECTORY"< cout< : left)< cout< : left)< cout< : left)< MFD*p=thisuser; UFD*q=p->file; for(inti=0;i<10;i++) { cout< : left)< cout< cout< : left)< cout< : left)< q=q->next; } } voidOpenMode(UFD*p,stringname) { AFD*f=openfile; inti; for(i=0;i<5;i++) { if(f->point! =NULL&&f->point->filename==name){cout<<"THISFILEISALREADYOPENED! "< f=f->next; } f=openfile; for(i=0;i<5;i++) { if(f->point==NULL)break; f=f->next; } if(i==5){cout<<"ERROR! YOUCAN'TOPENTHISFILE,NUMBERMUST<=5! ";} else { cout<<"ENTERTHEOPENMODE? "; stringprotect; cin>>protect; intj; for(j=0;j<3;j++) { if(p->pro[j]! =protect[j]-48)break; } if(j! =3){cout<<"ERROR,OPENMODEISWRONG! "< else { cout<<"THISFILEISOPENED,ITSOPENNUMBERIS"; cout< f->point=p; for(intj=0;j<3;j++) {f->filepro[j]=p->pro[j];} } } return; } voidCreate() { cout<<"THENEWFILESNAME(LESSTHAN9CHARS)? "; stringname; cin>>name; cout<<"THENEWFILE'SPROTECTIONCODE? "; stringprotect; cin>>protect; UFD*p=thisuser->file; UFD*q=p; intn; for(n=0;n<10;n++) { if(q->filename=="******")break; q=q->next; } if(n==10) {cout<<"CREATFAILED! ! THEREISNOSPACE,FILENUMBERMUST<=10! "< else { q->filename=name; for(inti=0;i<3;i++) { q->pro[i]=protect[i]-48; } } cout<<"THENEWFILEISCREATED."< OpenMode(q,name); return; } voidOpen() { cout<<"FILENAMETOBEOPENED? "; stringname; cin>>name; UFD*p=thisuser->file; UFD*q=p; intn; for(n=0;n<10;n++) { if(q->filename==name)break; q=q->next; } if(n==10){cout<<"ERROR! THISFILEISNOTEXISTS! "< else { OpenMode(q,name); } return; } voidClose1(AFD*f) { f->point=NULL; for(inti=0;i<3;i++) {f->filepro[i]=0;} cout<<"SUCCESS! THISFILEISCLOSED! "< return; } voidClose() { cout<<"CLOSETHEFILE'SNAME: "; stringname; cin>>name; UFD*p=thisuser->file; UFD*q=p; intn; for(n=0;n<10;n++) { if(q->filename==name)break; q=q->next; } if(n==10){cout<<"ERROR! CAN'TFINDTHISFILE! "< else { AFD*f=openfile; inti; for(i=0;i<5;i++) { if(f->point==q)break; f=f->next; } if(n==5){cout<<"ERROR! THISFILEISNOTOPENED! "< else { Close1(f); } } return; } voidDelete() { cout<<"DELETEFILENAME? "; stringname; cin>>name; UFD*p=thisuser->file; UFD*q=p; intn; for(n=0;n<10;n++) { if(q->filename==name)break; q=q->next; } if(n==10){cout<<"ERROR! CAN'TFINDTHISFILE! "< else { AFD*f=openfile; inti; for(i=0;i<5;i++) { if(f->point==q) { cout<<"ERROR! THISFILEISOPENED! CLOSEDIT? (Y/N)"< chary; cin>>y; if(y=='Y'){Close1(f);break;} elsereturn; } f=f->next; } q->filename="******"; q->codel=0; for(intx=0;x<3;x++) {q->pro[x]=0;} cout<<"SUCCESS! THISFILEISBEDELETED! "< } return; } voidRead() { cout<<"OPENFILENUMBER? "; intnum; cin>>num; AFD*f=openfile; inti; for(i=0;i<5;i++) { if(f->filenum==num&&f->point! =NULL)break; f=f->next; } if(i==5){cout<<"ERROR! THISFILEISNOTOPENED! "< else { if(f->filepro[0]==1){cout<<"SUCCESS! READING! "< else{cout<<"ERROR! THISFILECAN'TREADWITHREADINGRIGHTLIMITED! "< } return; } voidWrite() { cout<<"OPENFILENUMBER? "; intnum; cin>>num; AFD*f=openfile; inti; for(i=0;i<5;i++) { if(f->filenum==num&&f->point! =NULL)break; f=f->next; } if(i==5){cout<<"ERROR! THISFILEISNOTOPENED! "< else { if(f->filepro[1]==1) { cout<<"HOWMANYCHARACTERSTOBEWRITTENINTOTHATFILE? "; intcode; cin>>code; f->point->codel=code; } else{cout<<"ERROR! THISFILECAN'TWRITEWITHWRITINGRIGHTLIMITED! "< } return; } voidChange() { intx=0; while(x==0) { cout<<"YOURNAME? "<<""; stringusername; cin>>username; x=checkUser(username); if(x==0)cout<<"YOURNAMEISNOTINTHEUSERNAMETABLE,TRYAGAIN."< }show(); return; } voidNowshow(intb) {inta=1; intc; c=a-b; if(c! =0) show(); } voidFileWork(intcom) { if(com==1){Create();}//执行create if(com==2){Delete();}//执行delete if(com==3){Open();}//执行open if(com==4){Close();}//执行close if(com==5){Read();}//执行read if(com==6){Write();}//执行write if(com==7){Change();}//执行Change if(com==8){inth=3;Nowshow(h);}//执行Nowshow //执行bye return; } intmain() { cout<<"RUN"< init();//初始化 intx=1; Nowshow(x); Change(); intcom=0; while(com! =9) { cout<<"COMMANDNAME? "; strings; cin>>s; inti; for(i=0;i<9;i++) { if(s==command[i]){com=i+1;break;} } if(i==9) { cout<<"COMMANDNAMEGIVENISWRONG! "< cout<<"ITSHOULDBEONEOFFOLLOWING: "< cout<<"CREATE,DELETE,OPEN,CLOSE,READ,WRITE,CHANGE,NOWSHOW,BYE.TRYAGAIN"< continue; } else{FileWork(com);} } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文件 操作 管理