2022年实验四文件系统实验 .pdf

上传人:C****o 文档编号:40177265 上传时间:2022-09-08 格式:PDF 页数:24 大小:214.65KB
返回 下载 相关 举报
2022年实验四文件系统实验 .pdf_第1页
第1页 / 共24页
2022年实验四文件系统实验 .pdf_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《2022年实验四文件系统实验 .pdf》由会员分享,可在线阅读,更多相关《2022年实验四文件系统实验 .pdf(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验四 文件系统实验一.目的要求1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。2、要求设计一个 n 个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有 Create、delete、open、close、read、write 等命令。二.例题:1、设计一个 10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开 5 个文件。2、程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。

2、3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。4、算法与框图:因系统小,文件目录的检索使用了简单的线性搜索。文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为 0,则表示不允许读写、执行。程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD)打开文件目录(AFD)(即运行文件目录)M D FU F DA F D用户名文件名打开文件名文件目录指针保护码打开保护码用户名文件长度读写指针文件目录指针文件名名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 24 页 -文件系统算法的流程图如下:三.实验题:

3、1、增加 2 3 个文件操作命令,并加以实现。(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。#include#include#include#define getpch(type)(type*)malloc(sizeof(type)int userNum=0;struct mdf 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 24 页 -char userName20;struct UFD*p;mdf20;struct ufd char fileName20;char File50;struct ufd*next;*fp,*tp,*p,*begin;typed

4、ef struct ufd UFD;void show(struct UFD*f)begin=f;if(begin-next=NULL)printf(该用户名下尚无文件!n);else printf(该用户名下所有文件:n);begin=begin-next;while(begin!=NULL)printf(%s:%sn,begin-fileName,begin-File);begin=begin-next;void Operation(struct UFD*f)int i;char filename20,file50;begin=f;label:printf(请选择操作:n 1:create

5、;2:delete;3:read;4:write;5:open;n 6:lose;7:Chang Files Name;8:Show All The Filen);scanf(%d,&i);if(i=1)tp=getpch(UFD);printf(请输入文件名:);scanf(%s,filename);printf(n请输入文件内容:);scanf(%s,file);strcpy(tp-fileName,filename);名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 24 页 -strcpy(tp-File,file);tp-next=NULL;p=begin;p-next=

6、tp;printf(n文件创建完毕!n);goto label;else if(i=2)printf(请输入文件名:);scanf(%s,filename);p=begin-next;while(strcmp(p-fileName,filename)!=0&p!=NULL)p=p-next;if(p=NULL)printf(文件不存在!n);else tp=begin;while(tp-next!=p)tp=tp-next;tp-next=p-next;free(p);printf(文件已删除!n);goto label;else if(i=3)printf(请输入文件名:);scanf(%s

7、,filename);p=begin-next;while(strcmp(p-fileName,filename)!=0&p!=NULL)p=p-next;if(p=NULL)printf(文件不存在!n);else printf(%s:%sn,p-fileName,p-File);goto label;else if(i=4)printf(请输入文件名:);scanf(%s,filename);printf(n请输入文件内容:);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 24 页 -scanf(%s,file);p=begin-next;while(p!=NULL)if(

8、!(strcmp(p-fileName,filename)strcpy(p-File,file);printf(n替换了以%s为名的文件!n,filename);goto label;p=p-next;tp=getpch(UFD);strcpy(tp-fileName,filename);strcpy(tp-File,file);tp-next=NULL;p=begin;p-next=tp;printf(n创建了以%s为名的文件!n,filename);goto label;else if(i=5)goto label;else if(i=6)printf(功能被关闭,无法操作了 n);Sel

9、ect();else if(i=7)printf(请输入要改名的文件名:);scanf(%s,filename);while(p!=NULL)if(!(strcmp(p-fileName,filename)printf(n请输入新的文件名:);scanf(%s,filename);strcpy(p-fileName,filename);printf(n文件名已更改!n);goto label;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 24 页 -p=p-next;printf(文件不存在!n);goto label;else if(i=8)show(f);goto labe

10、l;else goto label;void Select()char username20;int i;printf(请输入用户名:n);scanf(%s,username);for(i=0;inext;printf(%sn,fp-fileName);else printf(该用户尚未创建任何文件!n);fp=mdfi.p;Operation(fp);if(i=userNum)名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 24 页 -printf(该用户不存在,创建新用户?n 1:是 2:否n);scanf(%d,&i);if(i=1)strcpy(mdfuserNum+.u

11、serName,username);printf(已创建用户!n);i=userNum-1;fp=mdfi.p;Operation(fp);else printf(查询其它?n 1:是 2:否n);scanf(%d,&i);if(i=1)Select();else printf(谢谢使用!n);return;int main()int i;for(i=0;inext=NULL;mdfi.p=tp;Select();return 0;2、编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。#include#include#include 名师资料总结-精品

12、资料欢迎下载-名师精心整理-第 7 页,共 24 页 -#define getpch(type)(type*)malloc(sizeof(type)int userNum=0;struct mdf char userName20;struct UFD*p;mdf20;struct ufd char fileName20;char File50;struct ufd*next;*fp,*tp,*p,*begin;typedef struct ufd UFD;void show(struct UFD*f)begin=f;if(begin-next=NULL)printf(该用户名下尚无文件!n);

13、else printf(该用户名下所有文件:n);begin=begin-next;while(begin!=NULL)printf(%s:%sn,begin-fileName,begin-File);begin=begin-next;void Operation(struct UFD*f)int i;char filename20,file50;begin=f;label:printf(请选择操作:n 1:create;2:delete;3:read;4:write;5:open;n 6:lose;7:Chang Files Name;8:Show All The Filen);scanf(

14、%d,&i);if(i=1)tp=getpch(UFD);printf(请输入文件名:);scanf(%s,filename);printf(n请输入文件内容:);名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 24 页 -scanf(%s,file);strcpy(tp-fileName,filename);strcpy(tp-File,file);tp-next=NULL;p=begin;p-next=tp;printf(n文件创建完毕!n);goto label;else if(i=2)printf(请输入文件名:);scanf(%s,filename);p=begin-n

15、ext;while(strcmp(p-fileName,filename)!=0&p!=NULL)p=p-next;if(p=NULL)printf(文件不存在!n);else tp=begin;while(tp-next!=p)tp=tp-next;tp-next=p-next;free(p);printf(文件已删除!n);goto label;else if(i=3)printf(请输入文件名:);scanf(%s,filename);p=begin-next;while(strcmp(p-fileName,filename)!=0&p!=NULL)p=p-next;if(p=NULL)

16、printf(文件不存在!n);else printf(%s:%sn,p-fileName,p-File);goto label;else if(i=4)printf(请输入文件名:);名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 24 页 -scanf(%s,filename);printf(n请输入文件内容:);scanf(%s,file);p=begin-next;while(p!=NULL)if(!(strcmp(p-fileName,filename)strcpy(p-File,file);printf(n替换了以%s为名的文件!n,filename);goto la

17、bel;p=p-next;tp=getpch(UFD);strcpy(tp-fileName,filename);strcpy(tp-File,file);tp-next=NULL;p=begin;p-next=tp;printf(n创建了以%s为名的文件!n,filename);goto label;else if(i=5)goto label;else if(i=6)printf(功能被关闭,无法操作了 n);Select();else if(i=7)printf(请输入要改名的文件名:);scanf(%s,filename);while(p!=NULL)if(!(strcmp(p-fil

18、eName,filename)printf(n请输入新的文件名:);scanf(%s,filename);strcpy(p-fileName,filename);printf(n文件名已更改!n);名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 24 页 -goto label;p=p-next;printf(文件不存在!n);goto label;else if(i=8)show(f);goto label;else goto label;void Select()char username20;int i;printf(请输入用户名:n);scanf(%s,username

19、);for(i=0;inext;printf(%sn,fp-fileName);else printf(该用户尚未创建任何文件!n);fp=mdfi.p;Operation(fp);名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 24 页 -if(i=userNum)printf(该用户不存在,创建新用户?n 1:是 2:否n);scanf(%d,&i);if(i=1)strcpy(mdfuserNum+.userName,username);printf(已创建用户!n);i=userNum-1;fp=mdfi.p;Operation(fp);else printf(查询其它

20、?n 1:是 2:否n);scanf(%d,&i);if(i=1)Select();else printf(谢谢使用!n);return;int main()int i;for(i=0;inext=NULL;mdfi.p=tp;Select();return 0;3、设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件。#include 名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 24 页 -#include /#include#include#include#include#define getpch(type)(typ

21、e*)malloc(sizeof(type)struct mulu /*定义目录结构体*/char name15;/*存放目录名*/char password6;/*如果用户目录时还保存用户密码*/char usr15;/*目录所属用户*/int time3;/*创建时间*/int son_nu;/*子目录数*/int wj_nu;/*目录下文件数*/struct mulu*parent;/*指向父目录*/struct mulu*son10;/*最多可以创建十个子目录*/struct wenjian*wj10;/*最多可以存放十个文件*/*root,*p;/*p指针用来指向当前目录*/stru

22、ct wenjian /*定义文件结构体*/char name15;/*存放文件名*/char usr15;/*文件所属用户*/int time3;/*文件最后修改时间*/struct mulu*parent;/*指向文件所在的目录*/*q;typedef struct mulu MULU;typedef struct wenjian WJ;char lujing2015;/*用来记录个路径*/int lj=0;/*记录根目录到当前目录级数,方便打印目录*/char user15;/*记录当前使用系统的用户,便于判断其访问文件权限*/char cmd2820=/*本系统的指令集*/CLS,cl

23、s,PWD,pwd,LS,ls,MKDIR,mkdir,RMDIR,rmdir,CD,cd,VI,vi,RM,rm,COPY,copy,MV,mv,HELP,help,LOGOUT,logout,MSD,msd,MVDIR,mvdir void Gotoxy(int x,int y)int xx=0 x0b;HANDLE hOutput;COORD loc;loc.X=x;名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 24 页 -loc.Y=y;hOutput=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(h

24、Output,loc);return;void ROOT()/*初始化根目录 root*/int i;root=getpch(MULU);p=root;strcpy(root-name,root);/*目录名为 root*/strcpy(root-usr,root-name);/*目录属主 root*/root-son_nu=0;/*用户个数为 0*/root-wj_nu=0;/*文件个数为 0*/root-parent=0;/*根目录是最上一级了*/for(i=0;isoni=0;root-wji=0;strcpy(lujing0,root);/*保存路径信息,供打印路径使用*/lj+=1;

25、int LOGIN()/*登陆函数,包括用户名和用户密码检验,在登陆过程中成功则返回 1,失败返回 0*/char a15;/*用于存放用户名*/char b6;/*用于存放密码*/char d;int i;int j=100;/*设计标记 j*/long int k;printf(请输入用户名:);scanf(%s,a);for(i=0;isoni-name)=0)j=i;if(j=100)名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 24 页 -printf(该用户不存在!nn);/*若 j 没改变即用户不存在*/d=getch();return 0;printf(请输入

26、密码:);/*检验密码*/scanf(%s,b);if(strcmp(b,root-sonj-password)=0)p=root-sonj;lj=2;strcpy(lujinglj,a);/*登陆滚动条个性化设置*/system(clr);Gotoxy(1,25);printf(=);Gotoxy(1,25);for(i=0;i79;i+)for(k=0;k);system(cls);printf(n);strcpy(user,a);/*记录当前登陆的用户*/return 1;printf(密码有误!nn);d=getch();return 0;int NEWUSER()/*新用户创建函数,

27、创建成功则返回 1,失败返回 0.*/struct tm*t;time_t curtime;curtime=time(NULL);t=gmtime(&curtime);char a7 char d;int i;long int j;if(root-son_nu=10)printf(用户已达到最大数目 nn);/*判断系统是否达到最大用户数目*/return 0;名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 24 页 -else p=getpch(MULU);printf(请输入用户名(最长 15 位):);scanf(%s,p-name);for(i=0;isoni!=0)i

28、f(strcmp(p-name,root-soni-name)=0)printf(该用户已存在!n);d=getch();return 0;printf(请输入位密码(最长 6 位):);scanf(%s,p-password);/*判断两次用户密码是否一致*/printf(再次输入密码:);scanf(%s,a);if(strcmp(a,p-password)!=0)printf(两次密码不同,创建新用户失败!);d=getch();return 0;strcpy(p-usr,p-name);p-son_nu=0;p-wj_nu=0;p-parent=root;for(i=0;isoni=0

29、;p-wji=0;/*保存最后修改时间*/gettime(&t);p-time0=t-tm_hour;p-time1=t-tm_min;p-time2=t-tm_sec;strcpy(lujinglj,p-name);lj+=1;/*登陆滚动条个性化设置*/system(clr);名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 24 页 -Gotoxy(1,25);printf(=);Gotoxy(1,25);for(i=0;i79;i+)for(j=0;j);system(cls);printf(n);strcpy(user,p-name);/*记录当前登陆的用户*/for(

30、i=0;isoni=0)root-soni=p;root-son_nu+=1;return 1;system(cls);printf(n);strcpy(user,p-name);/*记录当前登陆的用户*/for(i=0;isoni=0)root-soni=p;root-son_nu+=1;return 1;/*/void PWD()/*显示当前目录路径函数*/int i;for(i=0;ilj;i+)printf(%s/,lujingi);printf(n);名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 24 页 -/*/void LS()/*目录列表函数*/int i,j

31、;printf(名称用户类型修改日期n);printf(-n);for(i=0;isoni!=0)printf(%-15s%-15s目录,p-soni-name,p-soni-usr);printf(%d:%d:%dn,p-soni-time0,p-soni-time1,p-soni-time2);for(i=0;iwji!=0)printf(%-15s%-15s文件,p-wji-name,p-wji-usr);printf(%d:%d:%dn,(p-wji)-time0,(p-wji)-time1,(p-wji)-time2);printf(n);MKDIR()/*新键目录函数*/struc

32、t tm*t;time_t curtime;curtime=time(NULL);t=gmtime(&curtime);MULU*pp;int i;pp=getpch(MULU);scanf(%s,pp-name);名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 24 页 -if(strcmp(p-name,root)=0)printf(不能在该根目录下创建 nn);/*如果当前目录为根目录则不准建立*/return;if(p-son_nu=10)printf(创建目录已达到最大数目 nn);return for(i=0;isoni!=0)if(strcmp(p-soni-na

33、me,pp-name)=0)printf(该目录已存在:nn);return;/*判断该目录是否存在*/strcpy(pp-usr,p-usr);pp-son_nu=0;pp-wj_nu=0;pp-parent=p;for(i=0;isoni=0;pp-wji=0;/*保存最后修改时间*/gettime(&t);pp-time0=t-tm_hour;pp-time1=t-tm_min;pp-time2=t-tm_sec;printf(目录于%d:%d:%d 创建成功!nn,pp-time0,pp-time1,pp-time2);for(i=0;isoni=0)p-soni=pp;p-son_n

34、u+=1;return;名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 24 页 -/*/RMDIR()/*删除目录函数*/char a15;MULU*pp;int i,j=100;scanf(%s,a);for(i=0;isoni!=0)if(strcmp(p-soni-name,a)=0)pp=p-soni;j=i;if(pp-son_nu!=0|pp-wj_nu!=0)printf(操作失败,目录不存在或非空!nn);return;/*如果目录非空或不存在操作失败*/if(j!=100)p-sonj=0;p-son_nu-=1;free(pp);printf(操作成功!n

35、n);/*/CD()/*改变当前工作目录*/char a15;int i;scanf(%s,a);if(strcmp(a,.)=0)if(strcmp(p-name,root)=0)return;/*最高可以切换到根目录,如果在根目录下做cd.操作将失效*/p=p-parent;strcpy(lujinglj-1,0);lj-=1;return;名师资料总结-精品资料欢迎下载-名师精心整理-第 20 页,共 24 页 -for(i=0;isoni,a)=0)if(strcmp(user,p-soni-usr)!=0)printf(用户%s的文件查看被禁止,请以该用户登陆!nn,a);retur

36、n;p=p-soni;strcpy(lujinglj,p-name);lj+=1;return;printf(目标目录不存在!nn);return;4、根据学校各级机构,编制一文件系统。#include#include#include#define getpch(type)(type*)malloc(sizeof(type)char s50;struct node char fileName20;char file200;struct node*child,*brother;node,*head;typedef struct node File;void init()head=getpch(F

37、ile);strcpy(head-fileName,西北农林科技大学);strcpy(head-file,西北农林科技大学地处中华农耕文明发祥地、国家级农业高新技术产业示范区陕西杨凌,现为教育部直属全国重点大学,国家“985 工程”和“211 工程”重点建设高校.);head-child=head-brother=NULL;void insertDep()File*p;p=getpch(File);printf(请输入学院名称:);scanf(%s,s);strcpy(p-fileName,s);名师资料总结-精品资料欢迎下载-名师精心整理-第 21 页,共 24 页 -printf(n 请输

38、入学院基本信息:);scanf(%s,s);strcpy(p-file,s);p-brother=p-child=NULL;if(head-child=NULL)head-child=p;else p-brother=head-child;head-child=p;File*haveDep(char*s)File*p;p=head-child;if(p=NULL)printf(学校尚无学院信息,请先完善!n);insertDep();return head-child;else while(p!=NULL)if(strcmp(p-fileName,s)=0)return p;p=p-broth

39、er;printf(该学院尚不存在,请先完善n);insertDep();return head-child void insertMajor()File*p;printf(请输入该专业所在学院:);scanf(%s,s);p=haveDep(s);File*t=getpch(File);printf(请输入专业名称:);scanf(%s,s);strcpy(t-fileName,s);printf(n 请输入专业基本信息:);scanf(%s,s);strcpy(t-file,s);t-brother=t-child=NULL;if(p-child=NULL)p-child=t;else t

40、-brother=p-child;名师资料总结-精品资料欢迎下载-名师精心整理-第 22 页,共 24 页 -p-child=t;void display()File*p=head;printf(%s:%sn,p-fileName,p-file);p=p-child;while(p!=NULL)printf(学院:n%s:%sn,p-fileName,p-file);File*t=p-child;while(t!=NULL)printf(专业:n%s:%sn,t-fileName,t-file);t=t-brother;p=p-brother;void operation()int i;pri

41、ntf(选择操作:n1:插入学院及信息;2:插入专业及信息;3:显示所有信息;其它任意键退出 n);scanf(%d,&i);if(i=1)insertDep();else if(i=2)insertMajor();else if(i=3)display();else printf(Bye!);return;int main()init();while(1)operation();return 0;名师资料总结-精品资料欢迎下载-名师精心整理-第 23 页,共 24 页 -三、实验总结我们每天都在用文件系统,已经习惯了有文件路径寻找的方便,每次找文件时,感觉好容易,可实际去设计这个程序时,却很难。用树形结构图去设计,要有较好的全局思想,而且一些节点的分配。在设计此系统时,发觉自己对文件系统理解得不够透彻。不知道如何来具体设计这个实验,后来耐心回到本学期学习的课本内容上。名师资料总结-精品资料欢迎下载-名师精心整理-第 24 页,共 24 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁