1、文件管理实验4文件管理-实验4江南大学物联网工程学院实验报告课程名称 操作系统 实验名称 文件系统实验 实验日期 2015/5/28 班级 计算机1206 姓名 王成义 学号 1030412612 仪器编号 实验报告要求 1实验目的 2实验要求 3实验步骤 4程序清单 5运行情况 5实验体会实验目的用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 实验要求要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、cl
2、ose、read、write等命令。 3实验步骤主目录操作:流程图:4程序清单编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。#include #include #include /主文件结构体 struct MasterFile char username20; /用户名 char password20; /用户名密码 char flag; /标志 struct MasterFile *next; ; /用户文件结构体 struct UserFile int fnum; /文件编号 char fname20; /文件名 int flength; /
3、文件长度 char flag; /标志 char fpw20; /文件保护码 struct UserFile *link; ; /全局变量 int shoudsave; /存储标记 int usingnum; /当前用户标记 struct MasterFile MFD20; /主目录 struct UserFile UFD2020; /用户目录 /寻找主目录空闲区 struct MasterFile*MoveMFDToLast() for(int i=0;i20;i+) if(MFDi.flag=0) usingnum=i; return &MFDi; return NULL; /查找用户 s
4、truct MasterFile*SearchMFD(char str) for(int i=0;i20;i+) if(strcmp(str,MFDi.username)=0) usingnum=i; return &MFDi; return NULL; /寻找用户目录空闲区 struct UserFile *MoveUFDToLast() for(int i=0;i20;i+) if(UFDusingnumi.flag=0) return &UFDusingnumi; return NULL; /查找用户文件 struct UserFile *SearchUFD(int num) for(i
5、nt i=0;i20;i+) if(UFDusingnumi.fnum=num) return &UFDusingnumi; return NULL; /删除用户文件目录 void LeftMoveUFD(int num) for(int i=0;i20;i+) if(UFDusingnumi.fnum=num) for(int j=i;jusername,str1); strcpy(p-password,str2); p-flag=1; printf(%d,MFDusingnum.flag); p-next=NULL; shoudsave=1; /存储标记 else /旧用户登录 while
6、(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(对不起,你输入的口令
7、不正确,请重新输入.n); continue; else break; break; /菜单 void menu() printf(n*); printf(t1列文件目录ttttt2创建文件n); printf(t3删除文件ttttt4读文件n); printf(t5写文件tttttt0退出系统n); printf(*n); /列文件目录 void Dir() if(MFDusingnum.next=0) printf(目前你不存在任何文件!n); else for(int i=0;ilink=(struct UserFile*)fp; /设置用户目录 MFDusingnum.next=(st
8、ruct MasterFile*)&UFDusingnum0; strcpy(f-fname,str1); strcpy(f-fpw,str2); f-fnum=num; f-flength=0; f-flag=1; fclose(fp); shoudsave=1; /设置存储标记 printf(文件已创建!n); /删除文件 void Delete() struct UserFile *f; int num; printf(请输入你要删除的文件编号:); scanf(%d,&num); f=SearchUFD(num); /查找用户文件 if(f=NULL) printf(你要删除的文件不存
9、在!n); else LeftMoveUFD(num); /删除用户文件目录 printf(文件已删除!n); shoudsave=1; /设置存储标记 /读文件 void Read() char ch; struct UserFile *f; FILE *fp; int num; printf(请输入你要读的文件的编号:); scanf(%d,&num); f=SearchUFD(num); /查找文件 if(f=NULL) printf(你输入的文件不存在!n); else if(fp=fopen(f-fname,r)=NULL) /打开指定文件 printf(不能打开该文件!n); ex
10、it(0); ch=fgetc(fp); /输出文件内容 while(ch!=EOF) putchar(ch); ch=fgetc(fp); printf(n); fclose(fp); /关闭文件 printf(文件已读完毕!n); /写文件 void Write() char ch; struct UserFile *f; FILE *fp; int num; printf(请输入你要写的文件的编号:); scanf(%d,&num); f=SearchUFD(num); /查找文件 if(f=NULL) printf(你输入的文件不存在!n); else if(fp=fopen(f-fn
11、ame,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); /保存 void Save() FILE *fpm,*fpu; int flag=1,count=0; fpm=fopen(F:MasterFile.txt,wb); /打开主文件 if(fpm=
12、NULL) printf(n提示:重新打开主文件信息文件时发生错误!n); exit(1); for(int i=0;i20;i+) fwrite(&MFDi,sizeof(struct MasterFile),1,fpm); /保存主文件目录信息 fclose(fpm); printf(主文件目录信息保存完毕!n); fpu=fopen(F:UserFile.txt,wb); /打开用户文件 if(fpu=NULL) printf(n提示:重新打开用户目录信息文件时发生错误!n); exit(1); for(int j=0;j20;j+) /保存用户文件目录信息 fwrite(&UFDj,s
13、izeof(struct UserFile),20,fpu); fclose(fpu); printf(用户文件目录信息保存完毕!n); /主函数 int main() printf(nntt*ttn); printf(tttt实验四 文件管理n); printf(tt*ttn); printf(nnnttttt计算机1206n); printf(ttttt王成义n); printf(ttttt1030412612n); printf(ttttt完成时间:2015/5/28nnnn); printf(ttttWelcomenn); FILE *fpm,*fpu; /文件指针 int sel;
14、char ch; char jian; printf(tttt文件管理系统nttttn); fpm=fopen(D:MasterFile.txt,rb); /打开主文件目录信息文件 if(fpm=NULL) printf(n提示:主文件目录信息文件还不存在,是否创建?(y/n)n); scanf(%s,&jian); if(jian=y|jian=Y) fpm=fopen(D:MasterFile.txt,wb); /创建主文件目录的文件 else exit(0); fpu=fopen(D:UserFile.txt,rb); /打开用户文件目录信息文件 if(fpu=NULL) printf(
15、n提示:用户文件目录信息文件还不存在,是否创建?(y/n)n); scanf(%s,&jian); if(jian=y|jian=Y) fpu=fopen(D:UserFile.txt,wb); /创建用户文件目录的文件 else exit(0); printf(文件正在打开,请稍等.); for(int i=0;i20;i+) /读取主文件目录信息 fread(&MFDi,sizeof(struct MasterFile),1,fpm); /将文件的内容放入接点中 fclose(fpm); / 关闭文件 while(!feof(fpu) /读取用户目录文件信息 for(int i=0;i20
16、;i+) if(fread(&UFDi0,sizeof(struct UserFile),20,fpu) /将文件的内容放入接点中 MFDi.next=(struct MasterFile*)&UFDi0; fclose(fpu); /关闭文件 printf(n文件已导入完毕!n); Login(); /用户登录 while(1) /菜单操作 menu(); printf(请你选择操作:); scanf(%d,&sel); if(sel=0) /保存文件信息 if(shoudsave=1) getchar(); printf(n资料已经改动,是否将改动保存到文件中(y/n)?n); scanf
17、(%c,&ch); if(ch=y|ch=Y) Save(); printf(n你已经退出系统,再见!n); break; switch(sel) case 1:Dir(); break; /列文件目录 case 2:Create(); break; /创建文件 case 3:Delete(); break; /删除文件 case 4:Read(); break; /读文件 case 5:Write(); break; /写文件 default: printf(你输的选项有误,请重新输入!n); break; system(PAUSE); return 0;5运行情况6实验体会 通过编写和调试此次文件系统,加深了对各种文件操作命令的实质内容和执行过程的了解。对文件系统有了更深的了解。教师评价 优良 中及格不及格教师签名日期
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1