首页 计算机操作系统实验-文件管理

计算机操作系统实验-文件管理

举报
开通vip

计算机操作系统实验-文件管理哈尔滨工业大学计算机科学与技术学院实验报告课程名称:操作系统课程类型:必修实验项目名称:文件管理实验题目:设计一个多用户的文件系统班级:实验学院一班学号:6040310110姓名:张元竞设计成绩报告成绩指导老师一、实验目的随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂...

计算机操作系统实验-文件管理
哈尔滨工业大学计算机科学与技术学院实验报告课程名称:操作系统课程类型:必修实验项目名称:文件管理实验题目: 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 一个多用户的文件系统班级:实验学院一班学号:6040310110姓名:张元竞设计成绩报告成绩指导老师一、实验目的随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。二、实验要求及实验环境用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write等命令。所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。三、设计思想(本程序中的用到的所有数据类型的定义,主程序的 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图及各程序模块之间的调用关系)1.程序流程图2.逻辑设计使用线性表表示UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。该结构需支持以下操作:在尾部插入,查找,修改,在任意位置删除。3、物理设计charUserName[SizeOfUser][SizeOfUserName];//用户IDlongUser;//当前用户标志structInfoOfFile{charName[SizeOfFileName];//文件名boolsafe[3];//Read,Write,Executelongstatus;//ready,open;}UFD[SizeOfUser][SizeOfFile];longnum[SizeOfUser];//保存文件数longnum_open[SizeOfUser];//打开文件数charz[4]="rwe";//保护标记的显示形式四、测试结果注:蓝色行表示该行包括了输入内容PleaseinputyourID:hackerBadUserID.PleaseinputyourID:ACRushNamePropertyStatusskin.mapr--ReadyTian--eReady2file(s)intotalACRush>lsNamePropertyStatusskin.mapr--ReadyTian--eReady2file(s)intotalACRush>loginPleaseinputyourID:GaminerieNamePropertyStatus0file(s)intotalGaminerie>lsNamePropertyStatus0file(s)intotalGaminerie>createInputfilenameandproperty>kkkrweSuccess!Gaminerie>lsNamePropertyStatuskkkrweReady1file(s)intotalGaminerie>createInputfilenameandproperty>2.txt---Success!Gaminerie>lsNamePropertyStatuskkkrweReady2.txt---Ready2file(s)intotalGaminerie>openInputfilename>2.txtSuccess!Gaminerie>openInputfilename>2.txtFailed...File2.txtisalreadyopenedGaminerie>closeInputfilename>2.txtSuccess!Gaminerie>lsNamePropertyStatuskkkrweReady2.txt---Ready2file(s)intotalGaminerie>openInputfilename>2.txtSuccess!Gaminerie>lsNamePropertyStatuskkkrweReady2.txt---Opened2file(s)intotalGaminerie>openInputfilename>kkkSuccess!Gaminerie>readInputfilename>kkkFailed...FilekkkisalreadyopenedGaminerie>closeInputfilename>kkkSuccess!Gaminerie>readInputfilename>kkkSuccess!Gaminerie>lsNamePropertyStatuskkkrweReady2.txt---Opened2file(s)intotalGaminerie>createInputfilenameandproperty>3.txtrw-Success!Gaminerie>lsNamePropertyStatuskkkrweReady2.txt---Opened3.txtrw-Ready3file(s)intotalGaminerie>deleteInputfilename>2.txtFailed...File2.txtisalreadyopenedGaminerie>close2.txtInputfilename>Success!Gaminerie>deleteInputfilename>2.txtSuccess!Gaminerie>createInputfilenameandproperty>t---Success!Gaminerie>createInputfilenameandproperty>qq.exe--eSuccess!Gaminerie>lsNamePropertyStatuskkkrweReady3.txtrw-Readyt---Readyqq.exe--eReady4file(s)intotalGaminerie>createInputfilenameandproperty>luck---Success!Gaminerie>createInputfilenameandproperty>rprweSuccess!Gaminerie>lsNamePropertyStatuskkkrweReady3.txtrw-Readyt---Readyqq.exe--eReadyluck--eReadyrprweReady6file(s)intotalGaminerie>createInputfilenameandproperty>dorw-Success!Gaminerie>createInputfilenameandproperty>65.txt--eSuccess!Gaminerie>lsNamePropertyStatuskkkrweReady3.txtrw-Readyt---Readyqq.exe--eReadyluck--eReadyrprweReadydorw-Ready65.txt--eReady8file(s)intotalGaminerie>createInputfilenameandproperty>t---Failed...FiletalreadyexistsGaminerie>createInputfilenameandproperty>ir-eSuccess!Gaminerie>createInputfilenameandproperty>kpp---Success!Gaminerie>lsNamePropertyStatuskkkrweReady3.txtrw-Readyt---Readyqq.exe--eReadyluck--eReadyrprweReadydorw-Ready65.txt--eReadyir-eReadykpp---Ready10file(s)intotalGaminerie>createFailed...Youcanonlysave10filesGaminerie>deleteInputfilename>tSuccess!Gaminerie>lsNamePropertyStatuskkkrweReady3.txtrw-Readyqq.exe--eReadyluck--eReadyrprweReadydorw-Ready65.txt--eReadyir-eReadykpp---Ready9file(s)intotalGaminerie>createInputfilenameandproperty>tt---Success!Gaminerie>lsNamePropertyStatuskkkrweReady3.txtrw-Readyqq.exe--eReadyluck--eReadyrprweReadydorw-Ready65.txt--eReadyir-eReadykpp---Readytt---Ready10file(s)intotalGaminerie>saveSuccess!Gaminerie>byeByebye.可见各项功能都已实现并且正确。五、系统不足与经验体会系统的不足包括健壮性尚不够好,对文件的个数,文件名的长度等都有限制。经验体会:对于结构比较复杂的程序,应当事先有所规划,变量的结构一定要清楚,程序结构要清晰。类似的功能要设法用同一段代码实现,并采用结构化的思想。界面友好性需要注意。各种边界条件都需要注意,对于同一个命令的反复使用需要注意测试。六、附录:源代码(带注释)#include<cstdio>#include<cstring>#defineSizeOfUserName255#defineSizeOfUser10#defineSizeOfFile10#defineSizeOfCommand255#defineSizeOfFileName255charUserName[SizeOfUser][SizeOfUserName];longUser;structInfoOfFile{charName[SizeOfFileName];boolsafe[3];//Read,Write,Executelongstatus;//ready,open;}UFD[SizeOfUser][SizeOfFile];longnum[SizeOfUser];longnum_open[SizeOfUser];charz[4]="rwe";voidls()//列文件目录{chartmp[100];longi,j;printf("%20s%20s%20s\n","Name","Property","Status");for(i=0;i<num[User];i++){printf("%20s",UFD[User][i].Name);for(j=0;j<3;j++){if(UFD[User][i].safe[j]){tmp[j]=z[j];}else{tmp[j]='-';}}tmp[3]='\0';printf("%20s",tmp);if(UFD[User][i].status){printf("%20s\n","Opened");}else{printf("%20s\n","Ready");}}printf("%ldfile(s)intotal\n",num[User]);}longlogin()//切换用户{longi;charNameInput[SizeOfUserName];do{printf("PleaseinputyourID:");scanf("%s",NameInput);i=0;while(i<SizeOfUser&&strcmp(NameInput,UserName[i])!=0){i++;}if(strcmp(NameInput,UserName[i])!=0){printf("BadUserID.\n");}}while(strcmp(NameInput,UserName[i])!=0);returni;}voidinit()//初始化{longi,j,k;chartmp[4];memset(num_open,0,sizeof(num_open));//读入用户名列表freopen("record.txt","r",stdin);for(i=0;i<SizeOfUser;i++){scanf("%s",UserName[i]);}//读入文件列表for(i=0;i<SizeOfUser;i++){scanf("%ld",&num[i]);for(j=0;j<num[i];j++){scanf("%s%s",UFD[i][j].Name,tmp);for(k=0;k<3;k++){if(tmp[k]=='-'){UFD[i][j].safe[k]=0;}else{UFD[i][j].safe[k]=1;}}UFD[i][j].status=0;}}freopen("con","r",stdin);User=login();ls();}voidcreate()//创建文件{longi;charfilename[SizeOfFileName];charprop[128];if(num[User]==SizeOfFile)//保存已满{printf("Failed...Youcanonlysave%ldfiles\n",SizeOfFile);return;}printf("Inputfilenameandproperty>");scanf("%s%s",filename,prop);for(i=0;i<num[User];i++){if(strcmp(filename,UFD[User][i].Name)==0)//重名{printf("Failed...File%salreadyexists\n",filename);return;}}strcpy(UFD[User][num[User]].Name,filename);for(i=0;i<3;i++)//设置属性{if(prop[i]=='-'){UFD[User][num[User]].safe[i]=0;}else{UFD[User][num[User]].safe[i]=1;}}UFD[User][num[User]].status=0;++num[User];printf("Success!\n");}voidopen()//打开文件{longi;charfilename[SizeOfFileName];if(num_open[User]==5){printf("Failed...Youhavealreadyopened5files\n");//打开文件数已到上限return;}printf("Inputfilename>");scanf("%s",filename);for(i=0;i<num[User];i++){if(strcmp(filename,UFD[User][i].Name)==0){if(UFD[User][i].status==0)//文件未占用{UFD[User][i].status=1;num_open[User]++;printf("Success!\n");}else//已被打开{printf("Failed...File%sisalreadyopened\n",filename);}return;}}printf("Failed...Nosuchfile\n");//找不到文件}voidclose()//关闭文件{longi;charfilename[SizeOfFileName];printf("Inputfilename>");scanf("%s",filename);for(i=0;i<num[User];i++){if(strcmp(filename,UFD[User][i].Name)==0){if(UFD[User][i].status==1)//成功{UFD[User][i].status=0;num_open[User]--;printf("Success!\n");}else//文件并未打开{printf("Failed...File%sisnotopened\n",filename);}return;}}printf("Failed...Nosuchfile\n");//找不到文件}voidread()//读文件{longi;charfilename[SizeOfFileName];printf("Inputfilename>");scanf("%s",filename);for(i=0;i<num[User];i++){if(strcmp(filename,UFD[User][i].Name)==0){if(UFD[User][i].safe[0]==0)//属性设置为不可读{printf("Failed...File%sisnotreadable\n",filename);return;}if(UFD[User][i].status==1)//文件已打开{printf("Failed...File%sisalreadyopened\n",filename);return;}printf("Success!\n");//成功return;}}printf("Failed...Nosuchfile\n");//找不到文件}voidwrite()//写文件{longi;charfilename[SizeOfFileName];printf("Inputfilename>");scanf("%s",filename);for(i=0;i<num[User];i++){if(strcmp(filename,UFD[User][i].Name)==0){if(UFD[User][i].safe[1]==0)//属性设置为不可写{printf("Failed...File%sisnotwritable\n",filename);return;}if(UFD[User][i].status==1)//已打开{printf("Failed...File%sisalreadyopened\n",filename);return;}printf("Success!\n");//成功return;}}printf("Failed...Nosuchfile\n");//找不到文件}voidmydelete()//删除文件{longi,j;charfilename[SizeOfFileName];printf("Inputfilename>");scanf("%s",filename);for(i=0;i<num[User];i++){if(strcmp(filename,UFD[User][i].Name)==0){if(UFD[User][i].status==1)//文件正被打开{printf("Failed...File%sisalreadyopened\n",filename);return;}num[User]--;for(j=i;j<num[User];j++){UFD[User][j]=UFD[User][j+1];}printf("Success!\n");//成功return;}}printf("Failed...Nosuchfile\n");//找不到文件}voidsave()//保存本次信息{FILE*fp=fopen("record.txt","w");longi,j,k;chartt[4]="rwe";chartmp[4];//保存用户列表for(i=0;i<SizeOfUser;i++){fprintf(fp,"%s\n",UserName[i]);}//保存文件列表for(i=0;i<SizeOfUser;i++){fprintf(fp,"%ld\n",num[i]);for(j=0;j<num[i];j++){for(k=0;k<3;k++){if(UFD[i][j].safe[k]){tmp[k]=tt[k];}else{tmp[k]='-';}}tmp[3]=0;fprintf(fp,"%s%s\n",UFD[i][j].Name,tmp);}}printf("Success!\n");//成功fclose(fp);}voidwork()//交互主函数{boolover=0;charcommand[SizeOfCommand];while(!over){printf("%s>",UserName[User]);scanf("%s",command);if(strcmp(command,"login")==0){User=login();ls();continue;}if(strcmp(command,"bye")==0){printf("Byebye.\n");over=1;continue;}if(strcmp(command,"ls")==0||strcmp(command,"dir")==0){ls();continue;}if(strcmp(command,"create")==0){create();continue;}if(strcmp(command,"delete")==0){mydelete();continue;}if(strcmp(command,"open")==0){open();continue;}if(strcmp(command,"close")==0){close();continue;}if(strcmp(command,"read")==0){read();continue;}if(strcmp(command,"write")==0){write();continue;}if(strcmp(command,"save")==0){save();continue;}printf("Badcommand.\n");}}intmain(){init();work();return0;}
本文档为【计算机操作系统实验-文件管理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥18.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
绘画的问号
暂无简介~
格式:pdf
大小:196KB
软件:PDF阅读器
页数:0
分类:高中语文
上传时间:2020-07-01
浏览量:4