操作系统文件系统设计.docx

上传人:b****6 文档编号:6998448 上传时间:2023-01-15 格式:DOCX 页数:27 大小:20.93KB
下载 相关 举报
操作系统文件系统设计.docx_第1页
第1页 / 共27页
操作系统文件系统设计.docx_第2页
第2页 / 共27页
操作系统文件系统设计.docx_第3页
第3页 / 共27页
操作系统文件系统设计.docx_第4页
第4页 / 共27页
操作系统文件系统设计.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

操作系统文件系统设计.docx

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

操作系统文件系统设计.docx

操作系统文件系统设计

文件系统设计

实验内容

为DOS系统设计一个简单的二级文件系统。

要求做到以下几点:

①可以实现下列几条命令

LOGIN用户登陆

DIR列文件目录

CREATE创建文件

DELETE删除文件

OPEN打开文件

CLOSE关闭文件

READ读文件

WRITE写文件

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

③源文件可以进行读写保护。

源程序:

(本程序需要在c:

下建一个名为osfile的目录及一个名为file的子目录):

#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,"creat")==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("\nCdAttribCreatModifyReadOpenClsDeleteExitClose\n");

}

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

{intn=strlen(str)-1;

while(n>=0)

{if(*(str+n)!

='')

{*(str+n+1)='\0';

break;

}

elsen--;

}

if(n<0)str[0]='\0';

returnstr;

}

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

{char*rtrim(char*str);

strrev(str);

rtrim(str);

strrev(str);

returnstr;

}

voidLoginF()/*LOGINFileSystem*/

{charloginame[MAXNAME],loginpw[9],logincpw[9],str[50];

inti,j,flag=1;

chara[25];

intfindout;/*loginusernotexist*/

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

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

voidInputPW(char*password);/*inputpassword,use'*'replace*/

voidSetPANo(intRorW);/*Setphysicaladdressnum*/

while

(1)

{findout=0;

printf("\n\nLoginName:

");

gets(loginame);

ltrim(rtrim(loginame));

fp_mfd=fopen("c:

\\osfile\\","rb");

for(i=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!

=0;i++)

if(strcmp(strupr(ufd_lp.ufdname),strupr(loginame))==0)

{findout=1;

strcpy(logincpw,ufd_lp.ufdpword);

}

fclose(fp_mfd);

if(findout==1)/*userexist*/

{printf("LoginPassword:

");

InputPW(loginpw);/*inputpassword,use'*'replace*/

if(strcmp(loginpw,logincpw)==0)

{strcpy(username,strupr(loginame));

strcpy(dirname,username);

fp_mfd=fopen("c:

\\osfile\\","rb");

for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!

=0;j++)

{strcpy(str,"c:

\\osfile\\");

strcat(str,ufd_lp.ufdname);

ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));

strcpy(ufd[j]->ufdname,strupr(ufd_lp.ufdname));

fp_ufd=fopen(str,"rb");

fcount[j]=0;

for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!

=0;i++,fcount[j]++)

{ifopen[j][i].ifopen=0;

ifopen[j][i].openmode=4;}

fclose(fp_ufd);}

fclose(fp_mfd);

ucount=j;

SetPANo(0);

printf("\n\nLoginsuccessful!

WelcometothisFileSystem\n\n");

loginsuc=1;

return;}

else

{printf("\n\n");

flag=1;

while(flag)

{printf("LoginFailed!

PasswordError.TryAgain(Y/N):

");

gets(a);

ltrim(rtrim(a));

if(strcmp(strupr(a),"Y")==0){loginsuc=0;flag=0;}

elseif(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;}

}

}

}

else

{printf("NewPassword(<=8):

");

InputPW(loginpw);/*inputnewpassword,use'*'replace*/

printf("\nConfirmPassword(<=8):

");/*inputnewpassword,use'*'replace*/

InputPW(logincpw);

if(strcmp(loginpw,logincpw)==0)

{strcpy(ufd_lp.ufdname,strupr(loginame));

strcpy(ufd_lp.ufdpword,loginpw);

fp_mfd=fopen("c:

\\osfile\\","ab");

fwrite(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd);

fclose(fp_mfd);

strcpy(username,strupr(loginame));

strcpy(dirname,loginame);

strcpy(str,"c:

\\osfile\\");

strcat(str,username);

if((fp_ufd=fopen(str,"rb"))==NULL)

{fp_ufd=fopen(str,"wb");

fclose(fp_ufd);

}

fp_mfd=fopen("c:

\\osfile\\","rb");

for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!

=0;j++)

{strcpy(str,"c:

\\osfile\\");

strcat(str,ufd_lp.ufdname);

ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));

strcpy(ufd[j]->ufdname,strupr(ufd_lp.ufdname));

fp_ufd=fopen(str,"rb");

for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!

=0;i++,fcount[j]++)

{ifopen[j][i].ifopen=0;

ifopen[j][i].openmode=4;}

fclose(fp_ufd);}

fclose(fp_mfd);

ucount=j;

SetPANo(0);

printf("\n\nLoginSuccessful!

WelcometothisSystem\n\n");

loginsuc=1;

return;

}

else

{printf("\n\n");

flag=1;

while(flag)

{printf("LoginFailed!

PasswordError.TryAgain(Y/N):

");

gets(a);

ltrim(rtrim(a));

if(strcmp(strupr(a),"Y")==0){loginsuc=0;flag=0;}

elseif(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;}

}

}

}

}

}

voidSetPANo(intRorW)/*Setphysicaladdressnum,0-read,1-write*/

{inti,j;

if(RorW==0)

{if((fp_file_p=fopen("c:

\\osfile\\file\\file_p","rb"))==NULL)

{fp_file_p=fopen("c:

\\osfile\\file\\file_p","wb");

fclose(fp_file_p);

}

fp_file_p=fopen("c:

\\osfile\\file\\file_p","rb");

for(i=0;fread(&j,sizeof(int),1,fp_file_p)!

=0;i++)

fpaddrno[j]=1;

/*for(i=1;i

if((i%13)==0)fpaddrno[i]=1;*/

}

else

{fp_file_p=fopen("c:

\\osfile\\file\\file_p","wb");

/*for(i=1;i

if((i%13)==0)fpaddrno[i]=0;*/

for(i=0;i

if(fpaddrno[i]==1)

fwrite(&i,sizeof(int),1,fp_file_p);

}

fclose(fp_file_p);

}

voidInputPW(char*password)/*inputpassword,use'*'replace*/

{intj;

for(j=0;j<=7;j++)

{password[j]=getch();

if((int)(password[j])!

=13)

{if((int)(password[j])!

=8)

putchar('*');

else

{if(j>0)

{j--;j--;

putchar('\b');putchar('');putchar('\b');

}

elsej--;

}

}

else

{password[j]='\0';

break;

}

}

password[j]='\0';

}

voidDirF()/*DirFileSystem*/

{inti,j,count=0;

charsfmode[25],sfpaddr[25],str[25];

intExistD(char*dirname);/*WhetherDirNameExist,Exist-i,NotExist-0*/

clrscr();

if(strcmp(strupr(ltrim(rtrim(dirname))),"")!

=0)

{printf("\n\nC:

\\%s>dir\n",dirname);

printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddress","FileLength","Type","FileMode");

j=ExistD(dirname);

for(i=0;i

{if((i%16==0)&&(i!

=0))

{printf("\nPressanykeytocontinue..");

getch();

clrscr();

printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddress","FileLength","Type","FileMode");

}

itoa(ufd[j]->ufdfile[i].fpaddr,str,10);

strcpy(sfpaddr,"file");

strcat(sfpaddr,str);

if(ufd[j]->ufdfile[i].fmode==0)strcpy(sfmode,"ReadOnly");

elseif(ufd[j]->ufdfile[i].fmode==1)strcpy(sfmode,"WriteOnly");

elseif(ufd[j]->ufdfile[i].fmode==2)strcpy(sfmode,"ReadAndWrite");

elsestrcpy(sfmode,"Protect");

printf("%14s%16s%14d%10s%18s\n",ufd[j]->ufdfile[i].fname,sfpaddr,ufd[j]->ufdfile[i

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

当前位置:首页 > 工作范文 > 行政公文

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

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