操作系统实验四Word下载.docx

上传人:b****4 文档编号:17737761 上传时间:2022-12-09 格式:DOCX 页数:15 大小:184.55KB
下载 相关 举报
操作系统实验四Word下载.docx_第1页
第1页 / 共15页
操作系统实验四Word下载.docx_第2页
第2页 / 共15页
操作系统实验四Word下载.docx_第3页
第3页 / 共15页
操作系统实验四Word下载.docx_第4页
第4页 / 共15页
操作系统实验四Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

操作系统实验四Word下载.docx

《操作系统实验四Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验四Word下载.docx(15页珍藏版)》请在冰豆网上搜索。

操作系统实验四Word下载.docx

前者应包含文件主(即用户)及他们的目录区指针;

后者应给出每个文件主占有的文件目录,即文件名,保护码,文件长度以及他们存放的位置等。

另外为打开文件设置了运行文件目录(AFD),在文件打开时应填入打开文件

号,本次打开保护码和读写指针等。

(3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只修改读写指针,并不进行实际文件的读写操作。

五、设计思路

1.因系统小,文件目录的检索使用了简单的线性搜索,而没有采用Hash等有效算法。

2.文件保护简单实用了三位保护码,对应于允许读、允许写和运行执行,如下所示:

111

允许写允许读允许执行

如对应位为0,则不允许。

3.程序中使用的主要数据结构如下:

①主文件目录和用户文件目录

打开文件目录:

4.程序框图:

六、实验过程

1.整个程序运行过程如下:

输入用户名—>

在MFD中查找—>

显示UFD文件链表—>

初始化AFD运行文件表

—>

输入操作命令—>

执行操作命令—>

保存文件目录—>

打印文件目录—>

结束

2.MFD、UFD和AFD的结构定义如下:

structUFD

{

stringfilename;

intpro[3];

intcodel;

UFD*next;

};

structMFD

stringusername;

UFD*file;

MFD*next;

structAFD

intfilenum;

charfilepro[3];

UFD*point;

AFD*next;

3.voidinit()初始化函数

将文件链表变成循环链表,方便执行插入和删除操作。

4.intcheckUser()检查用户

检查输入的用户名是否在用户文件目录中。

5.voidCreate()创建一个文件

选择CREATE命令后,查看该用户的UFD链表内是否还有空闲结点:

(1)若有则设置该结点的内容,然后打开、修改AFD;

(2)若无则报错并退出。

6.voidOpen()打开一个文件

选择OPEN命令后,输入要打开的文件名,在UFD查找是否有该文件名:

(1)若有则打开并修改AFD;

7.voidClose()关闭一个文件

选择CLOSE命令后,输入需要关闭的文件名,在UFD中搜索是否有该文件名。

(1)若无则报错;

(2)若有,还要分两种情况:

通过检查,该文件并未被打开,则报错

存在该文件,且被打开,则正常调用voidClose1(AFD*f),关闭文件。

8.voidDelete()删除一个文件

选择DELETE命令后,输入需要删除的文件名,在UFD中搜索是否有该文件名:

通过检查,该文件已被打开,则需要先关闭该文件,确定需要关闭该文件后,通过调用voidClose1(AFD*f),关闭文件,然后删除该文件。

存在该文件,且未被打开,则课正常删除该文件,即重新初始化该文件的UDF结点。

9.voidRead()读一个文件

读文件的关键是保护码的判断。

选择了READ命令后,输入需要读的文件名,在UFD中搜索是否有该文件名:

(1)若有,但该文件没被打开,则报错;

(2)若有,且已被打开,此处要分两种情况:

如果保护码的读位为“0”,则不能对该文件进行读操作。

否则,就通过文件号来读文件,即通过AFD中的point指针来查找该文件。

10.voidWrite()写一个文件

写文件的关键也是保护码的判断。

选择了WRITE命令后,输入需要读的文件名,在UFD中搜索是否有该文件名:

如果保护码的写位为‘0’,则不能对该文件进行写操作。

否则,就可以通过文件号来写文件,即通过AFD中的point指针来查找。

11.Bye退出

选择了BYE命令后,程序退出并保存当前目录,然后将结果打印出来。

程序运行结果

1.用户验证

2.创建文件

3.关闭、打开文件

4.删除文件

5.读写文件

6.退出

七、感想体会

实验四主要是通过链表来实现对文件的管理的,要求设计一个10个用户的文件系统,每个用户最多可保存10个文件,一次运行中用户可打开5个文件。

程序采用了二级文件目录,设置了主文件目录和用户文件目录,另外为打开文件设置了运行文件目录,在文件打开时应填入打开文件号,本次打开保护码和读写指针。

在执行各种文件操作命令的时候,需要考虑多种情况,比如读写文件的时候就要考虑文件的保护码,以及该文件是否已被打开的问题;

创建命令时要在用户的文件目录中寻找空闲的文件结点,即没有被使用的文件,对其进行文件名、保护码、文件长度的设置;

删除命令就要考虑是否有这个文件,再查看此文件是否被打开,如果已经被打开,则要先关闭该文件,在进行删除,删除即对此文件结点进行初始化操作等等。

想清楚各项操作的分类情况之后,对每个函数进行编写就容易多了。

本次试验模拟了文件的管理操作,虽然只是一个小小的程序,也让我大致了解了计算机对于文件的管理是如何进行的。

由于是通过链表的操作实现的,也使我巩固了C++中的链表操作过程。

实验源代码:

#include<

iostream>

cstring>

#include<

iomanip>

usingnamespacestd;

stringa[10]={"

Carol"

"

Lily"

Lucy"

Bob"

A"

B"

C"

D"

E"

F"

stringcommand[7]={"

CREATE"

DELETE"

OPEN"

CLOSE"

READ"

WRITE"

BYE"

structUFD

structMFD

structAFD

AFD*openfile=NULL;

MFD*user=NULL;

MFD*thisuser;

<

<

endl;

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!

return;

else

OpenMode(q,name);

voidClose1(AFD*f)

f->

point=NULL;

for(inti=0;

i<

3;

i++)

{f->

filepro[i]=0;

SUCCESS!

THISFILEISCLOSED!

return;

voidClose()

CLOSETHEFILE'

SNAME:

"

CAN'

TFINDTHISFILE!

AFD*f=openfile;

inti;

for(i=0;

5;

{

if(f->

point==q)break;

f=f->

}

if(n==5){cout<

THISFILEISNOTOPENED!

}\

else

Close1(f);

voidDelete()

DELETEFILENAME"

inti;

point==q)

{

cout<

THISFILEISOPENED!

CLOSEDIT(Y/N)"

chary;

cin>

y;

if(y=='

Y'

){Close1(f);

break;

elsereturn;

}

q->

filename="

******"

codel=0;

for(intx=0;

x<

x++)

{q->

pro[x]=0;

cout<

THISFILEISBEDELETED!

voidRead()

OPENFILENUMBER"

intnum;

num;

AFD*f=openfile;

if(f->

filenum==num&

&

f->

point!

=NULL)break;

f=f->

if(i==5){cout<

filepro[0]==1){cout<

READING!

else{cout<

THISFILECAN'

TREADWITHREADINGRIGHTLIMITED!

voidWrite()

filepro[1]==1)

cout<

HOWMANYCHARACTERSTOBEWRITTENINTOTHATFILE"

intcode;

cin>

code;

f->

point->

codel=code;

TWRITEWITHWRITINGRIGHTLIMITED!

voidFileWork(intcom)

if(com==1){Create();

}<

show();

intcom=0;

while(com!

=7)

COMMANDNAME"

strings;

cin>

s;

for(i=0;

7;

if(s==command[i]){com=i+1;

if(i==7)

COMMANDNAMEGIVENISWRONG!

ITSHOULDBEONEOFFOLLOWING:

CREATE,DELETE,OPEN,CLOSE,READ,WRITE,BYE.TRYAGAIN"

continue;

else{FileWork(com);

return0;

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

当前位置:首页 > 考试认证 > 交规考试

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

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