实验六文件系统设计结果.docx

上传人:b****4 文档编号:1259736 上传时间:2022-10-19 格式:DOCX 页数:30 大小:33.12KB
下载 相关 举报
实验六文件系统设计结果.docx_第1页
第1页 / 共30页
实验六文件系统设计结果.docx_第2页
第2页 / 共30页
实验六文件系统设计结果.docx_第3页
第3页 / 共30页
实验六文件系统设计结果.docx_第4页
第4页 / 共30页
实验六文件系统设计结果.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

实验六文件系统设计结果.docx

《实验六文件系统设计结果.docx》由会员分享,可在线阅读,更多相关《实验六文件系统设计结果.docx(30页珍藏版)》请在冰豆网上搜索。

实验六文件系统设计结果.docx

实验六文件系统设计结果

实验六文件系统设计

1.目的和要求

本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。

2.实验内容

为DOS系统设计一个简单的二级文件系统,可以实现下列几条命令

DIR列文件目录

CREATE创建文件

DELETE删除文件

MODIFY修改文件

OPEN打开文件

CLOSE关闭文件

列目录时要列出文件名,物理地址,保护码和文件长度。

3.实验环境

①PC兼容机

②Windows、DOS系统、Turboc2.0

③C语言

4.实验提示

①首先应确定文件系统的数据结构:

主目录、活动文件等。

主目录文件的形式存放于磁盘,这样便于查找和修改。

主目录结构:

Ufdname用户名

Ufdfile指向用户的活动文件

活动文件结构:

Fpaddr文件物理地址

Flength文件长度

Fmode文件属性(filemode:

0-ReadOnly;1-WriteOnly;2-ReadandWrite(default))

Fname文件名称

②用户创建的文件,可以编号存储于磁盘上。

如:

file0,file1,file2…并以编号作为物理地址,在目录中进行登记。

③本程序需要在c:

下建一个名为osfile的目录及一个名为file的子目录,在利用程序创建了文件系统后,可以在这个文件夹下查看到相关的内容。

5.实验程序

#include"stdio.h"

#include"string.h"

#include"conio.h"

#include"stdlib.h"

#defineMAXNAME25/*thelargestlengthofmfdname,ufdname,filename*/

#defineMAXCHILD50/*thelargestchild*/

#defineMAX(MAXCHILD*MAXCHILD)/*thesizeoffpaddrno*/

typedefstruct/*thestructureofOSFILE*/

{

intfpaddr;/*filephysicaladdress*/

intflength;/*filelength*/

intfmode;/*filemode:

0-ReadOnly;1-WriteOnly;2-ReadandWrite(default);*/

charfname[MAXNAME];/*filename*/

}OSFILE;

typedefstruct/*thestructureofOSUFD*/

{

charufdname[MAXNAME];/*ufdname*/

OSFILEufdfile[MAXCHILD];/*ufdownfile*/

}OSUFD;

typedefstruct/*thestructureofOSUFD'LOGIN*/

{

charufdname[MAXNAME];/*ufdname*/

charufdpword[8];/*ufdpassword*/

}OSUFD_LOGIN;

typedefstruct/*fileopenmode*/

{

intifopen;/*ifopen:

0-close,1-open*/

intopenmode;/*0-readonly,1-writeonly,2-readandwrite,3-initial*/

}OSUFD_OPENMODE;

OSUFD*ufd[MAXCHILD];/*ufdandufdownfiles*/

OSUFD_LOGINufd_lp;

intucount=0;/*thecountofmfd'sufds*/

intfcount[MAXCHILD];/*thecountofufd'sfiles*/

intloginsuc=0;/*whetherloginsuccessfully*/

charusername[MAXNAME];/*recordloginuser'sname22*/

chardirname[MAXNAME];/*recordcurrentdirectory*/

intfpaddrno[MAX];/*recordfilephysicaladdressnum*/

OSUFD_OPENMODEifopen[MAXCHILD][MAXCHILD];/*recordfileopen/close*/

intwgetchar;/*whethergetchar()*/

FILE*fp_mfd,*fp_ufd,*fp_file_p,*fp_file;

voidmain()

{

inti,j,choice1;

charchoice[50];/*choiceoperation:

dir,create,delete,open,delete,modify,read,write*/

intchoiceend=1;/*whetherchoiceend*/

char*rtrim(char*str);/*removethetrailingblanks.*/

char*ltrim(char*str);/*removetheheadingblanks.*/

voidLoginF();/*LOGINFileSystem*/

voidDirF();/*DirFileSystem*/

voidCdF();/*ChangeDir*/

voidCreateF();/*CreateFile*/

voidDeleteF();/*DeleteFile*/

voidModifyFM();/*ModifyFileMode*/

voidOpenF();/*OpenFile*/

voidCloseF();/*CloseFile*/

voidReadF();/*ReadFile*/

voidWriteF();/*WriteFile*/

voidQuitF();/*QuitFileSystem*/

voidhelp();

if((fp_mfd=fopen("c:

\\osfile\\mfd","rb"))==NULL)

{

fp_mfd=fopen("c:

\\osfile\\mfd","wb");

fclose(fp_mfd);

}

for(i=0;i

/*textattr(BLACK*16|WHITE);*/

/*clrscr();*//*clearscreen*/

LoginF();/*userlogin*/

/*clrscr();*/

if(loginsuc==1)/*LoginSuccessfully*/

{

while

(1)

{

wgetchar=0;

if(choiceend==1)

{

printf("\n\nC:

\\%s>",strupr(dirname));

}

elseprintf("Badcommandorfilename.\nC:

\\%s>",strupr(username));

gets(choice);

strcpy(choice,ltrim(rtrim(strlwr(choice))));

if(strcmp(choice,"dir")==0)choice1=1;

elseif(strcmp(choice,"create")==0)choice1=2;

elseif(strcmp(choice,"delete")==0)choice1=3;

elseif(strcmp(choice,"attrib")==0)choice1=4;

elseif(strcmp(choice,"open")==0)choice1=5;

elseif(strcmp(choice,"close")==0)choice1=6;

elseif(strcmp(choice,"read")==0)choice1=7;

elseif(strcmp(choice,"modify")==0)choice1=8;

elseif(strcmp(choice,"exit")==0)choice1=9;

elseif(strcmp(choice,"cls")==0)choice1=10;

elseif(strcmp(choice,"cd")==0)choice1=11;

elseif(strcmp(choice,"help")==0)choice1=20;

elsechoice1=12;

switch(choice1)

{

case1:

DirF();choiceend=1;break;

case2:

CreateF();choiceend=1;if(!

wgetchar)getchar();break;

case3:

DeleteF();choiceend=1;if(!

wgetchar)getchar();break;

case4:

ModifyFM();choiceend=1;if(!

wgetchar)getchar();break;

case5:

choiceend=1;OpenF();if(!

wgetchar)getchar();break;

case6:

choiceend=1;CloseF();if(!

wgetchar)getchar();break;

case7:

choiceend=1;ReadF();if(!

wgetchar)getchar();break;

case8:

choiceend=1;WriteF();if(!

wgetchar)getchar();break;

case9:

printf("\nYouhaveexitedthissystem.");

QuitF();exit(0);break;

case10:

choiceend=1;clrscr();break;

case11:

CdF();choiceend=1;break;

case20:

help();choiceend=1;break;

default:

choiceend=0;

}

}

}

elseprintf("\nAccessdenied.");

}

voidhelp(void)

{

printf("\nTheCommandList\n");

/*printf("\nCdAttribCreateModifyReadOpenClsDeleteExitClose\n");*/

printf("Create:

Createafile(Youcaninitializefile'sattributeandcontent.)\n");

printf("Open:

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

当前位置:首页 > 工程科技 > 建筑土木

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

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