您好,欢迎访问三七文档
江南大学物联网工程学院实验报告课程名称《操作系统》实验名称文件系统实验实验日期2015/5/28班级计算机1206姓名王成义学号1030412612仪器编号实验报告要求1.实验目的2.实验要求3.实验步骤4.程序清单5.运行情况5.实验体会1.实验目的用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。2.实验要求要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。3.实验步骤主目录操作:等待用户命令输入待创建目录名输入要进入的目录名退出存在同名目录报错建立目录目录存在是否进入目录是Createcdexit否流程图:4.程序清单编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。#includestdio.h#includestdlib.h#includestring.h//主文件结构体structMasterFile{charusername[20];//用户名charpassword[20];//用户名密码charflag;//标志structMasterFile*next;};//用户文件结构体structUserFile{intfnum;//文件编号charfname[20];//文件名intflength;//文件长度charflag;//标志charfpw[20];//文件保护码structUserFile*link;};//全局变量intshoudsave;//存储标记intusingnum;//当前用户标记structMasterFileMFD[20];//主目录structUserFileUFD[20][20];//用户目录//寻找主目录空闲区structMasterFile*MoveMFDToLast(){for(inti=0;i20;i++){if(MFD[i].flag==0)usingnum=i;return&MFD[i];}returnNULL;}//查找用户structMasterFile*SearchMFD(charstr[]){for(inti=0;i20;i++){if(strcmp(str,MFD[i].username)==0){usingnum=i;return&MFD[i];}}returnNULL;}//寻找用户目录空闲区structUserFile*MoveUFDToLast(){for(inti=0;i20;i++){if(UFD[usingnum][i].flag==0)return&UFD[usingnum][i];}returnNULL;}//查找用户文件structUserFile*SearchUFD(intnum){for(inti=0;i20;i++){if(UFD[usingnum][i].fnum==num)return&UFD[usingnum][i];}returnNULL;}//删除用户文件目录voidLeftMoveUFD(intnum){for(inti=0;i20;i++){if(UFD[usingnum][i].fnum==num){for(intj=i;j19;j++){UFD[usingnum][i].flag=UFD[usingnum][i+1].flag;UFD[usingnum][i].flength=UFD[usingnum][i+1].flength;strcpy(UFD[usingnum][i].fname,UFD[usingnum][i+1].fname);UFD[usingnum][i].fnum=UFD[usingnum][i+1].fnum;strcpy(UFD[usingnum][i].fpw,UFD[usingnum][i+1].fpw);UFD[usingnum][i].link=UFD[usingnum][i+1].link;}}}}//用户登陆voidLogin(){charflag1,flag2,flag3;charstr1[20],str2[20],str3[20],str4[20];structMasterFile*p;printf(你是已有用户吗(y/n)?);scanf(%s,&flag1);if(flag1=='n'){//新用户登录printf(请创建新的用户:(y/n));scanf(%s,&flag2);if(flag2=='n'){printf(你已退出了系统!\n);exit(1);}else{printf(请输入你的用户名:);scanf(%s,&str1);printf(请输入口令:);scanf(%s,&str2);p=MoveMFDToLast();strcpy(p-username,str1);strcpy(p-password,str2);p-flag=1;printf(%d,MFD[usingnum].flag);p-next=NULL;shoudsave=1;//存储标记}}else{//旧用户登录while(1){printf(请输入你的用户名:);//输入用户名scanf(%s,&str3);p=SearchMFD(str3);if(p==NULL){printf(对不起,你输入的用户名不存在!\n);printf(继续(y)还是放弃(n)?);scanf(%s,&flag3);if(flag3=='y')continue;else{printf(你已退出了系统!\n);exit(1);}}else{while(1){printf(请输入口令:);//输入口令scanf(%s,&str4);if(strcmp(str4,p-password)!=0){printf(对不起,你输入的口令不正确,请重新输入.\n);continue;}elsebreak;}}break;}}}//菜单voidmenu(){printf(\n********************************************************************************);printf(\t1列文件目录\t\t\t\t\t2创建文件\n);printf(\t3删除文件\t\t\t\t\t4读文件\n);printf(\t5写文件\t\t\t\t\t\t0退出系统\n);printf(********************************************************************************\n);}//列文件目录voidDir(){if(MFD[usingnum].next==0)printf(目前你不存在任何文件!\n);else{for(inti=0;i20;i++){if(UFD[usingnum][i].flag==1)printf(文件编号\t%d\t文件名\t%s\t文件长度\t%d\t保护码\t%s\n,UFD[usingnum][i].fnum,UFD[usingnum][i].fname,UFD[usingnum][i].flength,UFD[usingnum][i].fpw);}}}//创建文件voidCreate(){FILE*fp;intnum;structUserFile*f;charstr1[20],str2[20];printf(请输入你要创建的文件名:);//输入文件信息scanf(%s,&str1);printf(请输入文件编号:);scanf(%d,&num);printf(请输入文件保护码:);scanf(%s,&str2);fp=fopen(str1,w);//创建文件f=MoveUFDToLast();//寻找用户目录空闲区if(&UFD[usingnum][0]==f)//连接主目录MFD[usingnum].next=(structMasterFile*)f;f-link=(structUserFile*)fp;//设置用户目录MFD[usingnum].next=(structMasterFile*)&UFD[usingnum][0];strcpy(f-fname,str1);strcpy(f-fpw,str2);f-fnum=num;f-flength=0;f-flag=1;fclose(fp);shoudsave=1;//设置存储标记printf(文件已创建!\n);}//删除文件voidDelete(){structUserFile*f;intnum;printf(请输入你要删除的文件编号:);scanf(%d,&num);f=SearchUFD(num);//查找用户文件if(f==NULL){printf(你要删除的文件不存在!\n);}else{LeftMoveUFD(num);//删除用户文件目录printf(文件已删除!\n);}shoudsave=1;//设置存储标记}//读文件voidRead(){charch;structUserFile*f;FILE*fp;intnum;printf(请输入你要读的文件的编号:);scanf(%d,&num);f=SearchUFD(num);//查找文件if(f==NULL){printf(你输入的文件不存在!\n);}else{if((fp=fopen(f-fname,r))==NULL){//打开指定文件printf(不能打开该文件!\n);exit(0);}}ch=fgetc(fp);//输出文件内容while(ch!=EOF){putchar(ch);ch=fgetc(fp);}printf(\n);fclose(fp);//关闭文件printf(文件已读完毕!\n);}//写文件voidWrite(){charch;structUserFile*f;FILE*fp;intnum;printf(请输入你要写的文件的编号:);scanf(%d,&num);f=SearchUFD(num);//查找文件if(f==NULL){printf(你输入的文件不存在!\n);}else{if((fp=fopen(f-fname,wr))==NULL){//打开指定文件printf(不能打开该文件!\n);exit(0);}}printf(请按字符输入内容(以'#'表示结束符));//写入文件scanf(%s,&ch);while(ch!='#'){fwrite(&ch,1,1,fp);scanf(%s,&ch);}fclose(fp);//关闭文件shoudsave=1;//设置存储标记printf(文件写入完毕!\n);}//保存voidSave(){FILE*fpm,*fpu;intflag=1,count=0;fpm=fopen(F:\\MasterFile.txt,wb);//打开主文件if(fpm==NULL){printf(\n提示:重新打开主文件信息文件时发生错误!\n);exit(1);}for(inti=0;i20;i++)fwrite(&MFD[i],sizeof(structMasterFile),1,fpm);//保存主文件目录信息fclose(fpm);printf(主文件目录信息保存完毕!\n);fpu=fopen(F:\\UserFile.txt,wb);//打开用户文件if(fpu==NULL){printf(\n提示:重新打开用户目录信息文件时发生错误!\n);exit(1);}for(intj=0;j20;j++)//保存用户文件目录信息fwrite(&UFD[j],sizeof(structUserFile),20,fpu);fclose(fpu
本文标题:文件管理_实验4
链接地址:https://www.777doc.com/doc-2336569 .html