版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验六:文件系统一、目的要求1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。2、要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。二、例题:设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件.程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。为了便于实现,对文件的读写作
2、了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。算法与框图: a、因系统小,文件目录的检索使用了简单的线性搜索. b、文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。 c、程序中使用的主要设计结构如下:、主文件目录和用户文件目录( MFD、UFD)、打开文件目录( AFD)(即运行文件目录)M D F用户名 文件目录指针 用户名 文件目录指针 U F D文件名 保护码 文件长度 文件名 A F D打开文件名 打开保护码 读写指针 三、调度算法的流程图四、文件管理源程序#includestdio。hinclu
3、destring.hinclude<malloc.h>#includestdlib。htypedefstructufd char filename10;/文件名*/ char procode8;/属性/int length;/*文件长度/structufd *nextfile;/*指向下一个文件/UFD;typedefstructmfd char username10;/用户名/structufd *link;/指向该用户的第一个文件/MFD;typedefstructprotected_flag char code4;PRO;typedefstructafd/运行文件目录*/ c
4、har filename10;/*打开文件名*/charprocode4;intrwpointer;/读写指针/AFD;PRO flag3=”100”,/只读/”110”,/读写/"001"/*可执行*/;UFD *rw_pointer;/读写指针/AFD afd=NULL;MFD filesystem10;intnum;/当前用户个数/voiddisplayallfile() inti; UFD p;for(i=0;i<num;i+) printf("用户 :s 目录如下!n”,filesystemi。username); p=filesystemi。li
5、nk;while(p) printf(”t文件名: st|”,p>filename);printf(”文件属性: st|”,pprocode);printf(”文件长度: dnn",p>length);p=p>nextfile; void input() /*建立用户文件系统*/ inti,j;int length;char filename10;charprocode4; UFD p1,p2,first;for(i=0;i10;i+)filesystemi。link=NULL;printf("用户号码:n”);scanf(”d”,num); for(i=
6、0;inum;i+)/输入各用户名称/ printf("输入第 %d个用户名:n”,i+1);scanf("s”,filesystemi。username); for(i=0;i<num;i+)/输入某用户的文件数据/ j=1;printf(" 第d个用户的文件如下n”,i+1);printf(”文件 %d:n”,j);printf(”长度 :");scanf(”%d”,length);if(!length)continue;printf(”文件名:”);scanf(”s",filename);printf("文件属性(100只
7、读,110读写,001可执行)”);scanf(”s",procode);first=(UFD)malloc(sizeof(UFD));firstnextfile=NULL;strcpy(firstfilename,filename);strcpy(first-procode,procode);first-length=length;p1=p2=first;j+;while(1) printf("文件 d:n”,j);printf(”长度 :”);scanf(”d”,length);if(!length)break;printf("文件名:”);scanf(&qu
8、ot;s”,filename);printf(”属性(100只读,110读写,001可执行):”);scanf(”s",procode);p2=(UFD*)malloc(sizeof(UFD));p2-nextfile=NULL;strcpy(p2filename,filename);strcpy(p2>procode,procode); p2-length=length;j+;p1->nextfile=p2; p1=p1nextfile; filesystemi。link=first; displayallfile();intfindusername(char user
9、name)/返回用户名下标,当I=NUM时,用户不存在/ inti;i=0;while(inum) if(!strcmp(filesystemi。username ,username))break;i+;returni;UFD findfilename(char filename,UFD filepointer) UFD k; k=filepointer;while(k&strcmp(filename,kfilename) k=knextfile;return k;voiddisplayfile(UFD *link) UFD p; p=link;if(!p)printf("n
10、此目录没有该文件!”);return;printf("n用户文件如下:n”);while(p)printf(”st|”,p-filename);printf(”st|",pprocode);printf(”dnn",p->length);p=pnextfile;voidcreatefile() char username10;char filename10;inti; UFD p1,p2,newfile; if(num>=10)/*用户文件目录已满,创建文件失败/ printf("用户文件目录已满n创建文件失败!n”);return;prin
11、tf(”输入用户名:n”);scanf(”s",username);i=findusername(username);/返回用户名下标*/ if(i=num)/如果该用户不存在,且用户个数不小于10,先创建用户再建立用户文件/ printf(”用户不存在,请建立用户!n");strcpy(filesystemnum。username ,username);/*创建用户目录/num+; newfile =(UFD *)malloc(sizeof(UFD);newfilenextfile=NULL;filesystemnum1。link=newfile;printf("
12、;文件名:”);scanf(”s”,filesystemnum1。link->filename);printf(”n属性:”);scanf(”s",filesystemnum-1。link->procode);printf("n长度:”);scanf(”%d”,(filesystemnum-1.link-length));printf(”n文件已创建!n”); else/*为已存在的用户建立文件*/ p1=p2=filesystemi。link ;printf(”输入文件名:");scanf("s”,filename);while(p2) i
13、f (!strcmp(p2filename,filename) printf(”文件名已存在,请输入新文件名!n”);scanf("%s”,filename); p1=p2;p2=p2-nextfile;newfile=(UFD )malloc(sizeof(UFD);newfile>nextfile=NULL;strcpy(newfile->filename,filename);printf("n属性:”);scanf("s”,newfile>procode);printf(”n长度:”);scanf(”d”,(newfile->leng
14、th));p1nextfile=newfile;/printf(”n文件已创建!n”);displayallfile();void displayuser()/显示用户目录*/inti;if(num=0)return;printf(”n用户目录如下! ”);for(i=0;i<num;i+);printf("ns”,filesystemi.username);void deletefile() /删除文件*/ inti;char username10;char filename10; UFD p1,p2;printf(”n输入用户名:n");scanf("s
15、”,username);i=findusername(username);/返回用户名下标if(i>=num) printf("用户不存在!n删除失败!");return ;else printf(”n输入文件名:”);scanf(”s”,filename); p1=p2=filesystemi。link;while(p2&strcmp(p2filename,filename) p1=p2; p2=p2-nextfile;if(!p2)printf("n文件不存在!n删除失败!n”);else if(p1=p2)filesystemi.link=p1
16、->nextfile; elsep1-nextfile=p2-nextfile;delete(p2);printf(”文件已删除!n”);displayallfile();AFD openfile() char username10;char filename10;inti; UFD p=NULL; AFD *k=NULL;/为打开的文件设置了运行文件目录/printf(”输入用户名:n”);scanf("%s”,username);i=findusername(username);/*返回用户名下标*/if(i=num) printf(”n用户不存在!n不能打开文件!n”);
17、return NULL; else/用户存在*/ printf(”n输入文件名:”);scanf(”%s",filename); p=findfilename(filename,filesystemi。link);if(!p)/*用户文件不存在*/ printf(”n文件不存在!n");return NULL;elseafd=(AFD *)malloc(sizeof(AFD);strcpy(afdfilename,p>filename);strcpy(afd-procode,p-procode);afdrwpointer=0;printf(”n文件已打开!n”);rw
18、_pointer=p;/*为了读文件保留指针*/printf(”t文件目录AFD:n”); /打开运行文件目录AFD*/printf(”t文件名 : sn”,afd->filename);printf("t属性 : %sn”,afd>procode);printf(”t读写指针 : %dn",afd>rwpointer); returnafd; voidclosefile() if(!afd)printf("n没有文件打开!n”);return; delete(afd);afd=NULL;printf(”n文件已关闭!n");voidr
19、eadfile()/AFD p; p=openfile();if(!p)return;if(strcmp(pprocode,”100")strcmp(pprocode,”110")printf(”nfile:%s 文件不可读!n”,pfilename);/操作/elseprintf(”已读取文件!n”);printf(”t文件名:%sn",p-filename);printf("t属性:%sn",pprocode);printf("t读写指针:dn”,rand()%rw_pointerlength); closefile();/关闭文
20、件/voidwritefile()AFD p;/*运行文件目录/UFD *k;p=openfile();k=rw_pointer;if(!p)return;if(strcmp(pprocode,”110")printf(”nfile:%s 该文件不能写!n",p>filename);return; else p>rwpointer=rand()%klength;k->length=p-rwpointer ;/*修改读书指针写回文件*/printf(”n已完成写操作!n”);printf(”t文件名 : sn”,k>filename);printf(”
21、t属性 : sn",kprocode);printf(”t长度 : dn”,k>length);closefile(); voidexecutefile()AFD p;p=openfile();if(!p)printf(”n文件不存在!n”);return;if(strcmp(pprocode,"001”)printf("n该文件不能执行!n”);printf(”n文件属性为不可执行文件!n”);return;elseclosefile();printf(”n文件执行完毕!”); void menu()printf("-n”);printf(” &
22、lt;文件管理> n”);printf(”-n”);printf(” MENU :n");printf(”ttmenu-显示菜单n");printf("ttopen-打开文件n”);printf(”ttclose-关闭文件n”);printf("ttcreate-创建文件n”);printf(”ttread-读文件n”);printf("ttwrite-写文件n”);printf(”ttexecute-执行文件n”);printf(”ttdelete-删除文件n”);printf("ttdisplay-显示文件列表n”);printf(”ttexit-退出n");printf(”t注意:输入时当文件长度为0时表示该用户的文件输入结束!n");printf("-n");void fileoperation()/文件基本操作/charstr10;int sort;while(1)printf(”输入命
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省扬州市邗江中学新疆班2025届物理高二第一学期期中学业水平测试试题含解析
- 陕西省西安市远东一中2025届高一物理第一学期期末达标检测模拟试题含解析
- 新疆昌吉州教育共同体2025届物理高三第一学期期中复习检测试题含解析
- 大兴安岭市重点中学2025届高一物理第一学期期末质量跟踪监视模拟试题含解析
- 山东省潍坊新2025届物理高一上期末考试试题含解析
- 山东省潍坊市昌乐博闻学校2025届高三物理第一学期期中质量检测试题含解析
- 山东省日照市第一中学2025届物理高一第一学期期中检测试题含解析
- 2025届河南豫南九校高三物理第一学期期末教学质量检测试题含解析
- 2025届湖北省八校联合体物理高一上期中调研模拟试题含解析
- 吉林省通化市梅河口市博文学校2025届高一物理第一学期期末学业质量监测试题含解析
- 长链、中链脂肪乳区别
- 起重吊装作业指导书
- pMD19-T载体说明书
- 客户投诉产品质量问题处理
- 消防档案(附填写方法)
- 足球 课件 (共14张PPT)
- 对相对性状的杂交实验ppt课件
- 快时尚服装品牌的营销策略分析以zara为例
- 纸箱生产工艺流程(图文)
- 能源调度管理要点
- 水闸检查记录表与维修养护记录表.doc
评论
0/150
提交评论