




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、江南大学物联网工程学院实验报告课程名称 操作系统实验名称 文件系统实验 实验日期2015/5/28班级 计算机1206 姓名 王成义学号 1030412612仪器编号 实验报告要求17应验目的2.实验要求3-验步骤4.程序清单一5.运行情况5.实验体会1 .实验目的用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。2 .实验要求要求设计一个 n个用户的文件系统,每次用户可保存 m个文件,用户在一次运行中只能打开一个文件,对文 件必须设置保护措施,且至少有Create、delete、open、close、read、writ
2、e等命令。3 .实验步骤主目录操作:流程图:4 .程序清单每屏要为用户提供足够的选择信息,不需要打入冗长编一个通过屏幕选择命令的文件管理系统, 的命令。#include <stdio.h>#include <stdlib.h>#include <string.h>/主文件结构体struct MasterFilechar username20;/ 用户名char password20;/ 用户名密码char flag; / 标志struct MasterFile *next;;/用户文件结构体struct UserFileint fnum; /文件编号char
3、 fname20; / 文件名int flength; / 文件长度char flag; / 标志char fpw20;/文件保护码struct UserFile *link; I ;/全局变量int shoudsave; / 存储标记 int usingnum; /当前用户标记 struct MasterFile MFD20;/ 主目录struct UserFile UFD2020;用户目录 /寻找主目录空闲区struct MasterFile*MoveMFDToLast() for (int i=0;i<20;i+)|if (MFDi.flag=0) usingnum=i; retu
4、rn &MFDi;return NULL;/查找用户struct MasterFile*SearchMFD( char str)for (int i=0;i<20;i+)if (strcmp(str,MFDi.username)=0) usingnum=i;return &MFDi;return NULL;/寻找用户目录空闲区struct UserFile *MoveUFDToLast()for (int i=0;i<20;i+)|if (UFDusingnumi.flag=0) return &UFDusingnumi;return NULL;/查找用户文
5、件struct UserFile *SearchUFD( int num)for (int i=0;i<20;i+) Iif (UFDusingnumi.fnum=num) return &UFDusingnumi;return NULL;/删除用户文件目录void LeftMoveUFD( int num)for (int i=0;i<20;i+) |if (UFDusingnumi.fnum=num)for (int j=i;j<19;j+)UFDusingnumi.flag=UFDusingnumi+1.flag;UFDusingnumi.flength=UFD
6、usingnumi+1.flength;strcpy(UFDusingnumi.fname,UFDusingnumi+1.fname);UFDusingnumi.fnum=UFDusingnumi+1.fnum;strcpy(UFDusingnumi.fpw,UFDusingnumi+1.fpw);UFDusingnumi.link=UFDusingnumi+1.link;/用户登陆void Login()char flag1,flag2,flag3;char str120,str220,str320,str420;struct MasterFile *p;printf("你是已有用
7、户吗(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("请输入口令:&qu
8、ot;);scanf( "%s”,&str2);p=MoveMFDToLast();strcpy(p->username,str1);strcpy(p->password,str2);p->flag=1;printf( "%d",MFDusingnum.flag);p->next=NULL;shoudsave=1; / 存储标记else /旧用户登录while (1)printf("请输入你的用户名:");/输入用户名scanf( "%s”,&str3);p=SearchMFD(str3);if
9、 (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
10、)printf("对不起,你输入的口令不正确,请重新输入.n"); continue ; else break; break;/菜单void menu()/列文件目录void Dir()if (MFDusingnum.next=0)printf("目前你不存在任何文件!n");else for (int i=0;i<20;i+)if (UFDusingnumi.flag=1)printf("文件编号t%dt文件名t%st文件长度t%dt保护码t%sn" ,UFDusingnumi.fnum,UFDusingnumi.fname,
11、UFDusingnumi.flength,UFDusingnumi.fpw); /创建文件void Create()FILE *fp;int num;struct UserFile *f;char str120,str220;printf("请输入你要创建的文件名:");/输入文件信息scanf( "%s",&str1); printf("请输入文件编号:");scanf( "%d",&num);printf("请输入文件保护码:");scanf( "%s”,&
12、str2);fp=fopen(str1, "w"); / 创建文件f=MoveUFDToLast(); /寻找用户目录空闲区if (&UFDusingnum0=f) / 连接主目录MFDusingnum.next=( struct MasterFile*)f;f->link=( struct UserFile*)fp;设置用户目录MFDusingnum.next=( struct MasterFile*)&UFDusingnum0;strcpy(f->fname,str1); |strcpy(f->fpw,str2);f->fnum=
13、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("你要删除的文件不存在!n");else LeftMoveUFD(num); /删除用户文件
14、目录 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) / 打开指
15、定文件 printf("不能打开该文件!n");exit(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",&nu
16、m);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);scan
17、f( "%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=NULL)printf( "n提示:重新打开主文件信息文件时发生错误!n");exit(1);for (int i=0;i<20;i+)f
18、write(&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;j<20;j+)/保存用户文件目录信息fwrite(&UFDj, sizeof
19、 (struct UserFile),20,fpu);fclose(fpu);printf("用户文件目录信息保存完毕!n");/主函数int main(););printf( "nntt*ttn"printf( "tttt 实验四 文件管理n");计算机1206机');printf("懂*懂坨”printf( "nnntttttprintf("ttttt王成义 n");printf("ttttt1030412612n"X printf("ttttt完成时间
20、:2015/5/28nnnn");printf("ttttWelcomen'n");FILE *fpm,*fpu; / 文件指针int sel;char ch;char jian;printf( "tttt文件管理系统 nttttn");fpm=fopen( "D:MasterFile.txt" , "rb" ); /打开主文件目录信息文件 if (fpm=NULL) printf( "n提示:主文件目录信息文件还不存在,是否创建?(y/n)n");scanf( "%
21、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( "n提示:用户文件目录信息>文件还不存在,是否创建?(y/n)n"); scanf( "%s"
22、;,&jian); if (jian= 'y' |jian= 'Y')fpu=fopen( "D:UserFile.txt" , "wb"); / 创建用户文件目录的文件else exit(0);I_printf("文件正在打开,请稍等");for (int i=0;i<20;i+)/读取主文件目录信息fread(&MFDi, sizeof (struct MasterFile),1,fpm); / 将文件的内容放入接点中 fclose(fpm); / 关闭文件 while (!f
23、eof(fpu) /读取用户目录文件信息for (int i=0;i<20;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)
24、;if (sel=0)/保存文件信息if (shoudsave=1)getchar();printf( "n资料已经改动,是否将改动保存到文件中(y/n)?n");scanf( "%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 .运行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件设计师核心概念梳理试题及答案
- 2024年兰州市榆中县中医医院招聘笔试真题
- 2024年安徽省市场监管局下属事业单位真题
- 游戏行业会计个人工作计划
- 江苏省常州市钟楼区二十四中学2025年七年级数学第二学期期末质量跟踪监视试题含解析
- 保安工作总结计划广告宣传行业保安工作的广告位保护
- 2024年滨州市环境卫生清运大队招聘笔试真题
- 教育在幼儿园的实践计划
- 风险管理体系中的评估方法试题及答案
- 四川省成都市龙泉驿区2025年七下数学期末教学质量检测试题含解析
- 运输供应商年度评价表
- 2023年海南省财金集团有限公司招聘笔试题库及答案解析
- 信息系统项目管理师论文8篇
- 北京中考英语词汇表(1600词汇)
- 超市消防监控系统设计
- 封样管理规定
- 黄腐酸钾项目可行性研究报告-用于立项备案
- 管理人员责任追究制度
- 自动旋转门PLC控制
- 电影场记表(双机位)
- 毕设高密电法探测及数据处理解释
评论
0/150
提交评论