1、实验六 文件系统设计 实 验 报 告课程名称: 计算机操作系统 实验名称: 实验六 文件系统设计 学 生 姓 名: 孙文浩 班 级 计算机141 学 号 14416122 学 院(系): 信息数理学院 指 导 教 师: 梁久祯 实验时间: 2016 年 12 月 6 日 实验成绩: 实验六 文件系统设计1目的和要求本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。2实验内容为DOS系统设计一个简单的二级文件系统,可以实现下列几条命令DIR 列文件目录CREATE 创建文件DELETE 删除文件MODIFY 修改文件OPEN 打开文件CLOSE 关闭文件列目录
2、时要列出文件名,物理地址,保护码和文件长度。3实验环境PC兼容机Windows、DOS系统、Turbo c 2.0C语言4实验提示首先应确定文件系统的数据结构:主目录、活动文件等。主目录文件的形式存放于磁盘,这样便于查找和修改。主目录结构:Ufdname 用户名 Ufdfile 指向用户的活动文件活动文件结构:Fpaddr 文件物理地址 Flength 文件长度 Fmode 文件属性(file mode:0-Read Only;1-Write Only;2-Read and Write(default)) Fname 文件名称用户创建的文件,可以编号存储于磁盘上。如:file0,file1,f
3、ile2并以编号作为物理地址,在目录中进行登记。本程序需要在c:下建一个名为osfile的目录及一个名为file的子目录,在利用程序创建了文件系统后,可以在这个文件夹下查看到相关的内容。5实验程序#include stdio.h#include string.h#include conio.h#include stdlib.h#define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/#define MAXCHILD 50 /*the largest child*/#define MAX (MAXCHILD*MAXC
4、HILD) /*the size of fpaddrno*/typedef struct /*the structure of OSFILE*/ int fpaddr; /*file physical address*/ int flength; /*file length*/ int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write(default);*/ char fnameMAXNAME; /*file name*/ OSFILE;typedef struct /*the structure of OSUFD*/ c
5、har ufdnameMAXNAME; /*ufd name*/ OSFILE ufdfileMAXCHILD; /*ufd own file*/OSUFD;typedef struct /*the structure of OSUFDLOGIN*/ char ufdnameMAXNAME; /*ufd name*/ char ufdpword8; /*ufd password*/ OSUFD_LOGIN;typedef struct /*file open mode*/ int ifopen; /*ifopen:0-close,1-open*/ int openmode; /*0-read
6、only,1-write only,2-read and write,3-initial*/OSUFD_OPENMODE;OSUFD *ufdMAXCHILD; /*ufd and ufd own files*/OSUFD_LOGIN ufd_lp;int ucount=0; /*the count of mfds ufds*/int fcountMAXCHILD; /*the count of ufds files*/int loginsuc=0; /*whether login successfully*/char usernameMAXNAME; /*record login users
7、 name22*/char dirnameMAXNAME;/*record current directory*/int fpaddrnoMAX; /*record file physical address num*/OSUFD_OPENMODE ifopenMAXCHILDMAXCHILD; /*record file open/close*/int wgetchar; /*whether getchar()*/FILE *fp_mfd,*fp_ufd,*fp_file_p,*fp_file;void main() int i,j,choice1; char choice50; /*cho
8、ice operation:dir,create,delete,open,delete,modify,read,write*/ int choiceend=1; /*whether choice end*/ char *rtrim(char *str); /*remove the trailing blanks.*/ char *ltrim(char *str); /*remove the heading blanks.*/ void LoginF(); /*LOGIN FileSystem*/ void DirF(); /*Dir FileSystem*/ void CdF(); /*Cha
9、nge Dir*/ void CreateF(); /*Create File*/ void DeleteF(); /*Delete File*/ void ModifyFM(); /*Modify FileMode*/ void OpenF(); /*Open File*/ void CloseF(); /*Close File*/ void ReadF(); /*Read File*/ void WriteF(); /*Write File*/ void QuitF(); /*Quit FileSystem*/ void help(); if(fp_mfd=fopen(c:osfilemf
10、d,rb)=NULL) fp_mfd=fopen(c:osfilemfd,wb); fclose(fp_mfd); for(i=0;i,strupr(dirname); else printf(Bad command or file name.nC:%s,strupr(username); gets(choice); strcpy(choice,ltrim(rtrim(strlwr(choice); if (strcmp(choice,dir)=0) choice1=1; else if(strcmp(choice,create)=0) choice1=2; else if(strcmp(ch
11、oice,delete)=0) choice1=3; else if(strcmp(choice,attrib)=0) choice1=4; else if(strcmp(choice,open)=0) choice1=5; else if(strcmp(choice,close)=0) choice1=6; else if(strcmp(choice,read)=0) choice1=7; else if(strcmp(choice,modify)=0) choice1=8; else if(strcmp(choice,exit)=0) choice1=9; else if(strcmp(c
12、hoice,cls)=0) choice1=10; else if(strcmp(choice,cd)=0) choice1=11; else if(strcmp(choice,help)=0) choice1=20; else choice1=12; switch(choice1) case 1:DirF();choiceend=1;break; case 2:CreateF();choiceend=1;if(!wgetchar) getchar();break;/创建文件 case 3:DeleteF();choiceend=1;if(!wgetchar)getchar();break;/
13、删除文件 case 4:ModifyFM();choiceend=1;if(!wgetchar) getchar();break;/修改文件 case 5:choiceend=1;OpenF();if (!wgetchar) getchar();break;/打开文件 case 6:choiceend=1;CloseF();if (!wgetchar) getchar();break;/关闭文件 case 7:choiceend=1;ReadF();if (!wgetchar) getchar();break;/读文件 case 8:choiceend=1;WriteF();if (!wget
14、char) getchar();break;/写文件 case 9:printf(nYou have exited this system.);/提示你已经退出这个系统了 QuitF();exit(0);break;/退出系统 case 10:choiceend=1;clrscr();break;/清屏 case 11:CdF();choiceend=1;break; case 20:help();choiceend=1;break;/帮助 default:choiceend=0; else printf(nAccess denied.);void help(void) printf(nThe
15、 Command Listn); /*printf(nCd Attrib Create Modify Read Open Cls Delete Exit Closen);*/ printf(Create : Create a file(You can initialize files attribute and content.)n); printf(Open : Open a file to modifyn); printf(Close : Close a file.n); printf(Modify : Modify the opened file.n); printf(Delete :
16、Delete existed files.n); printf(CD : Change current directory.n); printf(Exit : Exit this program.n);char *rtrim(char *str) /*remove the trailing blanks.*/ int n=strlen(str)-1; while(n=0) if(*(str+n)!= ) *(str+n+1)=0; break; else n-; if (nufdname,strupr(ufd_lp.ufdname); fp_ufd=fopen(str,rb); fcountj
17、=0; for(i=0;fread(&ufdj-ufdfilei,sizeof(OSFILE),1,fp_ufd)!=0;i+,fcountj+) ifopenji.ifopen=0; ifopenji.openmode=4; fclose(fp_ufd); fclose(fp_mfd); ucount=j; SetPANo(0); printf(nnLogin successful! Welcome to this FileSystemnn); loginsuc=1; return; else printf(nn); flag=1; while(flag) printf(Login Fail
18、ed! Password Error. Try Again(Y/N):); gets(a); ltrim(rtrim(a); if (strcmp(strupr(a),Y)=0) loginsuc=0;flag=0; else if(strcmp(strupr(a),N)=0)loginsuc=0;flag=0;return; else printf(New Password(=8):); InputPW(loginpw); /*input new password,use * replace*/ printf(nConfirm Password(ufdname,strupr(ufd_lp.u
19、fdname); fp_ufd=fopen(str,rb); for(i=0;fread(&ufdj-ufdfilei,sizeof(OSFILE),1,fp_ufd)!=0;i+,fcountj+) ifopenji.ifopen=0; ifopenji.openmode=4; fclose(fp_ufd); fclose(fp_mfd); ucount=j; SetPANo(0); printf(nnLogin Successful! Welcome to this Systemnn); loginsuc=1; return; else printf(nn); flag=1; while(
20、flag) printf(Login Failed! Password Error. Try Again(Y/N):); gets(a); ltrim(rtrim(a); if (strcmp(strupr(a),Y)=0) loginsuc=0;flag=0; else if(strcmp(strupr(a),N)=0)loginsuc=0;flag=0;return; void SetPANo(int RorW) /*Set physical address num,0-read,1-write*/ int i,j; if (RorW=0) if(fp_file_p=fopen(c:osf
21、ilefilefile_p,rb)=NULL) fp_file_p=fopen(c:osfilefilefile_p,wb); fclose(fp_file_p); fp_file_p=fopen(c:osfilefilefile_p,rb); for(i=0;fread(&j,sizeof(int),1,fp_file_p)!=0;i+) fpaddrnoj=1; /*for(i=1;iMAX;i+) if (i%13)=0) fpaddrnoi=1;*/ else fp_file_p=fopen(c:osfilefilefile_p,wb); /*for(i=1;iMAX;i+) if(i%13)=0) fpaddrnoi=0;*/ for(i=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1