



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机操作系统课程设计班级:计091-1 姓名: 学号: 使用语言:C+ 指导老师:学院:系统要求1、实验目的通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。2、实验内容为 linux 系统设计一个简单的二级文件系统。要求做到以下几点:( 1)可以实现下列几条命令(至少4 条);logi n dircreate用户登陆 列文件目录创建文件 删除文件delete ope打开文件n close关闭文件read write读文件 写文件( 2) 列目录时要列出文件名、物理地址、保护码和文件长度;( 3) 源文件可以进行读写保护。1、系统分析1、设计思想本文件为二级文件系统,即
2、要实现对文件的增删改查,同时又具备登陆系统、注册用户的功能,各个用户之间的文件系统互不干扰。本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。系统采用结构体来存储用户、文件目录、文件数据内容:048*548*5+44*5048*5+44*50+264*200用户区文件目录区文件数据区每个分区都是由结构体组成,每个个去的结构体的个数由格式化系统是决定。整个系统的编码构成主要分为:欢迎下载2Workspace 1 project-file files-Source Files 圃 my
3、main.cpp 团 rriycys.cpp 丈 1 myuserfiile.cpp - 3 Header FilesXI allstruct.li司 mysys,h荀 myuserfile.hr l Resource FilesAllstruct.h定义了每个分区的结构体;Mysys.h声明了对系统操作的各种方法;Myuserfile.h声明了对文件操作的各种方法;Myma in .cpp整个系统的主函数,操作入口;Mysys.cpp包含了mysys.h ,实现了操作系统的各种方法;Myuserfile.cpp包含了myuserfile.h ,实现了操作文件的各种方法;2、主要数据结构All
4、struct.h struct文件的内容:s_user 用户区结构体long isuse; charn ame20; char/是否使用psd20; long用户名address;/密码;/目录地址struct s_list目录结构体long isuse; char/是否使用 文n ame20;long myaddress;件名字/本条目录地址long poi ntaddress; /指向的文件的地址long isfile;/ 是否锁定long poi ntsize; / 目标文件的大小long nextaddress; /下条目录的地址 ;struct s file/文件结构体long is
5、use;/是否使用char conten t256; / 文件内容long next;/下个文件块地址;欢迎下载3系统执行_濮壽和 I題 aa 廡BBM3、用户创建成功后出现对系统操作的菜单4、注册用户功能 :爲输入新用户的用户名:A dnin淸输入密码123情再次输入密码 :1235、用户登录,登录成功后显示当前用户下的所有文件及其详细信息,同时显示对文件操作的菜单:欢迎下载46 新注册的用户默认为没有文件,选择创建文件,并且每次对文件操作后显示当前用户的所有文件和操作菜单:冷输入文件名f 字母和数字 " 最多均个字符九aa文件由多少个字符m 组成? 必须小于冇讯个字符128文件是
6、否锁定r y 锁定 / 冰或其他自由谍与当前目录下的文件,文件名大小 是否锁定物理地址aa128V24407、此次新建的文件为锁定状态,不能被删除:書输入要删除的文件的名字AA.反件锁定 I不能删 J除I国前目录下的文件:艮件名大小是否锁定物理地址aa128V24468、对文件查看,默认创建的时候用0 填充文件内容 :欢迎下载5善输入要查看的文件 的名学(仅 限当前目診aa03000090000000900000000000000000000000000000000000000000000000000000?H0O900M0S0O900M0S0O900M0E100000M0E100000M0E
7、10000000反件查看 成功!首前目亲丽交徉;灵件名大小是否锁定物理地址aa129V24401_ . _ . _9、修改文件内容 :请输入要修改的文件的名字;仅限当前目录输入内容;sdf sdlf sf sdf sdf sdJsdf sdfsJtfsdfsdf文件修改成功 I1丽官亲丽程丈徉名大小是否锁定物理地址Y2440aa128员円歼穴円员 nriEifirfcEFi 员円穴员刊园!穴円员円穴员刊贰穴円员円穴员刊贰穴円员fIR 员刊贰穴円员 fIR 员 firfcEFieflR打10、对文件的锁定进行装换:存输入要转换是否锁定的文件的名字,C 仅限当前目录,aai文件己转换为自由谟写I当
8、前目录 下的文件;文件名大水是否锁定物理地址dia128N244311、删除文件 :青输入要删除的文件的名字:(仅限当前目录件删除成功 I" 的文件?llffi*#, 目录为空 I12、注销登录退出系统:欢迎下载6林鬥扁1 查看文齐新肆文3 ?删除文 i叽條改文件“是否樹定状态转换乩泣销 . 退出程序P 注销!PFES 旨nn 寸to mntijluB四、功能实现Mysys.h#i nclude <stdio.h>#i nclude "myuserfile.h" class MSysterm封装了管理系统的方法/成员变量private:FILE *my
9、file;MUser myuser;/成员函数public:MSysterm()void outName();/打印登陆后的用户名int cheack();检查虚拟文件系统跟是否存在int myformat();/初始化虚拟磁盘int createuser(); /创建用户int log in();/ 用户登录void mymai n();/主控制程序int logout();/ 用户注销;Myuserfile.h#in clude <stdio.h>class MUser/圭寸装了管理文件的方法/成员变量public:FILE *myfile;char n ame20;/ 用户名
10、char psd20;/ 密码欢迎下载7long listaddress;/ 目录地址long myaddress;此用户的地址private:/成员函数long lastaddress;/最后一个目录的地址public:int createFile();增加文件int delFile(char filename20); 删除文件int revampFile(char filename20); 修改文件in t mydir();列出当前目录的所有文件( 夹 )int viewFile(char filename20); 查看文件int myConversion(char filename20)
11、; 转换是否锁定状态private:int isSame(char filename_f20,char filename_s20);Mymain.cpp#i nclude <stdio.h> #in clude <iostream> #in clude "mysys.h" #i nclude <limits> using n amespace std;int mai n()char nod1;int n_ select = 2 , i_1 =0; MSysterm mysys;*文件不存在的程序入口*/if(mysys.cheack()=
12、-1) 磁盘空间不存在cout<<" 虚拟磁盘文件不存在,是否生成?Y/N "<<e ndl;cin? no d1;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits<streamsize>:max(),'n'); /清空输入流if(n od1='Y'| nod1='y')cout<<" 正在创建。"<<endl;if(mysys.myformat()!=1) 创建磁盘空间cout<<&qu
13、ot; 创建磁盘空间失败!即将退出。"<<e ndl;cin? no d1; return 2;cout<<" 创建完成!是否创建用户?Y/N "<<endl;cin? no d1;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits<streamsize>:max(),'in'); /清空输入流if(no d1='Y'| nod1='y')if(mysys.createuser()=1)/仓U建用户欢迎下载8 cout<
14、;<" 创建用户成功。 "<<e ndl;elsecout<<" 创建用户失败!即将退出。"<<e ndl;return 3;elsecout<<" 匿名用户无法进入系统,正在退出。"<<endl;return 4;elsecout<<" 程序已结束!按任意键退出。"<<endl; return 1;*文件存在的程序入口*for (;)cout<<" *"<<e ndl;cout&l
15、t;<" 请选择: "<<e ndl;2.注册 "<<endl<<"3.退出 "<<endl;cout<<" 1. 登录 "<<endl<<"cout<<" *"<<e ndl;ci n? n_ select;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits<streamsize>:max(),'n'); /
16、清空输入流if (n_select = 1)-for (in t i_1= 0;i_1<=3;i_1+) 登录if (mysys.logi n()=1) cout<<" 登陆成功!欢迎您 " mysys.outName();break;else .cout<<" 用户名不存在或密码错误!"<<e ndl;if (i_ 仁 =4)-cout<<" 非法用户 !"<<endl<<" 输入任意键退出。"<<endl;cin? no
17、d1;return 5;break;欢迎下载9if (n_select = 2)-if(mysys.createuser()=1) 仓U 建用户cout<<" 创建用户成功。 "<<e ndl;elsecout<<" 创建用户失败!"<<e ndl;if (n_select = 3)-return 6; mysys.myma in(); return 0;Mysys.cpp#in clude "mysys.h"#in clude "allstruct.h"#in cl
18、ude <iostream>#i nclude <stdio.h>#include <limits> 用于清除残留的输入流using n amespace std;int MSysterm:cheack()检查虚拟空间是否存在myfile=fope n( "test1.txt","r"); if(myfile=NULL)return -1;/ 返回 -1 ,代表文件不存在fclose(myfile);return 1;int MSysterm:myformat()int i =1;myfile=fope n("
19、;test1.txt","w"); if(myfile=NULL)return -1;s_user ms_user; ms_user.isuse=0;s_list ms_list;欢迎下载10ms_list.isuse=O;s_file ms_file;ms_file.isuse=0;for (i =1 ; i<=5 ; i+)if(fwrite(&ms_user,sizeof(ms_user),1,myfile)!=1)用户区格式化 - -cout<<" 用户格式信息写入失败!"<<endl;fclose
20、(myfile);return -2;for (i = 1; i<=50 ;i+)if(fwrite(&ms_list,sizeof(ms_list),1,myfile)!=1)目录区格式化 - -cout<<" 目录格式信息写入失败!"<<endl;fclose(myfile);return -3;for (i=0;i<=199;i+)if(fwrite(&m s_file,sizeof(ms_file),1,myfile)!=1)/数据区格式化 - -cout<<" 数据格式信息写入失败!&quo
21、t;<<e ndl;fclose(myfile);return -4;fclose(myfile);return 1;int MSysterm:createuser() 创建用户s_user ms_user,ms_user2;int nowaddress = 0 ,issame=0 ,m=0 , i =1 ;/记录当前的扫描指针,密码比对标志位 ,循环使用的变量cout<<" 正在检查用户空间是否足够。"<<endl;myfile=fope n( "test1.txt","r");for (i=1;
22、i<=5;i+,fseek(myfile,44,1), nowaddress+)检查用户空间是否足够if (fread(&m s_user2.isuse,4,1,myfile)=0) -cout<<" 读取用户空间失败,虚拟磁盘格式错误,可能已被损坏"<<e ndl;fclose(myfile);return -1;欢迎下载11if (ms_user2.isuse=0)-break;if (i=6)cout<<" 用户空间已满!创建用户失败"<<endl;return -2;for (;)co
23、ut<<" 请输入新用户的用户名:"<<e ndl;cin>> ms_user. name;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits<streamsize>:max(),'n'); /清空输入流fseek(myfile,0,0);for (i=1;i<=5;i+) 检查用户名if (fread(&ms_user2.isuse,4,1,myfile)=0 )/找到被使用的用户区,下-' 步读取字_名cout<<"
24、读取用户空间失败,虚拟磁盘格式错误,可能已被损坏fclose(myfile);return -1;if (ms_user2.isuse=0)-fseek(myfile,44,1);elseif (fread(&ms_,20,1,myfile)=0) 读取用户区的名字 -cout<<" 读取用户空间失败,虚拟磁盘格式错误,可能已被损坏"<<e ndl;fclose(myfile);return -1;for (m =0 ;m<=19;m+)if (ms_user. namem != ms_user2. namem)-
25、-issame = 0;break;elseissame = 1;if (ms_user. namem = '0')-break;if (issame = 1)欢迎下载12cout<<" 用户名重复!请重新输入:"<<e ndl;break;fseek(myfile,24,1);if (i>=6)for (;)/ 输入密码cout<<" 请输入密码,最多19 位。 "<<endl;cin? m s_user.psd;cin.clear(); / 清除流的错误标记cin.ignore(n
26、umeric_limits<streamsize>:max(),'n'); /清空输入流cout<<" 请再次输入密码:"<<e ndl;cin? m s_user2.psd;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits<streamsize>:max(),'in'); /清空输入流for (m =0 ;m<=19;m+)if (ms_user.psdm != ms_user2.psdm)- -issame = 0;cout<<
27、;" 两次密码不匹配 "<<' '<<ms_user.psd<<" "<<ms_user2.psd<<""<<m<<e ndl;break;elseissame = 1;if (ms_user.psdm = '0')-break;if (issame = 1)break;cout<<" 进入存储。"<<endl;ms_user.isuse =1;/空间使用置为使用(1);ms_
28、user.address = 0;/默认不存在目录fclose(myfile);myfile=fope n( "test1.txt","r+");fseek(myfile,48* no waddress,0);if(fwrite(&m s_user,sizeof(ms_user),1,myfile) = 0) - -cout<<" 写入用户信息失败!"<<e ndl;elsebreak;欢迎下载13欢迎下载14fclose(myfile); return 1;int MSysterm:login()/用
29、户登录s_user ms_user,ms_user2;int issame = 0, m = 0 , i =0 ;/比较标记,循环使用的变量cout<<" 请输入用户名: "<<e ndl;cin? m s_user. name;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits<streamsize>:max(),'n'); /清空输入流myfile=fope n( "test1.txt","r");for (i = 1;i<=5
30、;i+)if (fread(&ms_user2.isuse,4,1,myfile)=0) 读取被使用的用户区 -cout<<" 读取用户空间失败,虚拟磁盘格式错误,可能已被损坏"<<e ndl;fclose(myfile);return -1;if (ms_user2.isuse=0)-fseek(myfile,44,1);con ti nue;elseif (fread(&ms_,20,1,myfile)=0) 读取名字 -cout<<" 读取用户空间失败,虚拟磁盘格式错误,可能已被损坏&q
31、uot;<<e ndl;fclose(myfile);return -1;for (m =0 ;m<=19;m+)if (ms_user. namem != ms_user2. namem)- -issame = 0;break;elseissame = 1;if (ms_user. namem = '0')-break;if (issame = 1)if (fread(&ms_user2.psd,20,1,myfile)=0) 读取密码 -cout<<" 读取密码失败!磁盘错误。"<<e ndl;fclos
32、e(myfile);return -1;欢迎下载15for (int k=0;k<=2;k+)cout<<" 请输入密码: "<<e ndl;cin? m s_user.psd;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits<streamsize>:max(),'n'); /清空输入流for (m =0 ;m<=19;m+)if (ms_user.psdm != ms_user2.psdm)- -issame = 0; break;elseissame = 1;
33、if (ms_user.psdm = '0') - break;if (issame = 0)cout<<" 密码错误,请重新输入。"<<e ndl;elseif (fread(&ms_user2.address,4,1,myfile)=0) 读取目录地址 - cout<<" 读取目录失败!磁盘错误。"<<e ndl;fclose(myfile); return -1;for (m=0;m<=19;m+) 对对象 myuser 赋值 myuser. namem = ms_use
34、r2 .n amem; myuser.psdm = ms_user2.psdm; -myuser.listaddress = ms_user2.address; myuser.myaddress = (i-1)*48;fclose(myfile);return 1;/ 返回登录成功 fclose(myfile); return -2;/密码错误 fseek(myfile,24,1);fclose(myfile);return -1;void MSysterm:mymain() 主控制程序欢迎下载16记录使用第几层控制台,接收函数返回值int m_point=9,myget=0;char m_n
35、ame120,m _n ame220;for (;)if(m_poi nt = 0)- myget=logout(); break;cout<<e ndlvv"* "<<endl;当前目录下的文件 :"<<ecoutvv"myget = myuser.mydir();ndl;coutvv'I* "vve ndl;coutvv" * "vve ndl;coutvv" 请输入您的选择: "vve ndl;coutvv"1.查看文件内容 "vven
36、dl;coutvv"2. 新建文件 "vvendl;coutvv"3. 删除文件 "vvendl;coutvv"4. 修改文件 "vvendl;coutvv"5.是否锁定状态转换 "vvendl;coutvv"0.注销,退出程序 "vvendl;coutvv" * "vve ndl;cin>> m_po int;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limitsvstreamsize>:max(),'n&
37、#39;); /清空输入流switch (m_po int) -case 1:if (myuser.listaddress = 0)coutvv" 您还没有创建文件!"vve ndl;break;( 仅限当前目录 )"vvendl;coutvv" 请输入要查看的文件的名字:cin? m_n amel;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limitsvstreamsize>:max(),'in'); /清空输入流myget = myuser.viewFile(m _n amel);swi
38、tch (myget)case 1: coutvv" 文件查看成功!"vve ndl;break;case -1:coutvv" 磁盘打开失败!"vve ndl;break;case -2:coutvv" 文件不存在!"vve ndl;break;default: break;欢迎下载17break;/case 1 文件打开case 2:myget = myuser.createFile();switch (myget)case 1:cout<<" 创建成功!"<<e ndl;break;c
39、ase -1:cout<<" 磁盘打开失败!"<<e ndl;break;case -2:cout<<" 目录空间已满!"<<endl;break;case -3:cout<<" 数据空间已满!"<<e ndl;break;case -4:cout<<" 文件名已存在!"<<e ndl;break;default:cout<<" 创建文件失败,原因未知!"<<endl;brea
40、k;break;/case 2 新建文件case 3:if (myuser.listaddress = 0)cout<<" 您还没有创建文件!"<<e ndl;break;cout<<" 请输入要删除的文件的名字:( 仅限当前目录 )"<<endl;cin? m_n ame1;欢迎下载18cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits<streamsize>:max(),'n'); /清空输入流myget = myuser.del
41、File(m_ name1);switch (myget)case 1:cout<<" 文件删除成功!"<<e ndl;break;case -1: cout<<" 磁盘打开失败!"<<e ndl;break;case -2:cout<<" 文件不存在!"<<e ndl;break;case -4: cout<<" 文件锁定!不能删除!"<<e ndl;break;default:cout<<" 未
42、知原因,删除失败!"<<e ndl;break; break;/case 3 删除文件case 4:if (myuser.listaddress = 0)cout<<" 您还没有创建文件!"<<e ndl;break;( 仅限当前目录 )"<<endl;cout<<" 请输入要修改的文件的名字:cin? m_n ame1;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits<streamsize>:max(),'in
43、9;); /清空输入流myget = myuser.revampFile(m_ namel);switch (myget)case 1:cout<<" 文件修改成功!"<<e ndl;break;case -1: cout<<" 磁盘打开失败!"<<e ndl;break;case -2:cout<<" 文件不存在!"<<e ndl;break;case -4:/cout<<" 文件锁定!无法修改!"<<e ndl;欢迎
44、下载19break;case -5:cout<<" 输入内容过多!无法修改!"<<e ndl;break;default:/cout<<" 未知原因,修改失败!"<<e ndl;break; break;/case 4 修改文件case 5:if (myuser.listaddress = 0)cout<<" 您还没有创建文件!"<<e ndl;break;( 仅限当前目录 )"<<endl;cout<<" 请输入要转换是否锁定的文件的名字:cin? m_n ame1;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits<streamsize>:max(),'n'); /清空输入流myget = myuser.myC on vers i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030一次性使用口罩行业市场发展分析及发展趋势前景预测报告
- 2025-2030慢动作照相机行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030年谷氨酸行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国闪光触发行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国金融大数据行业市场前景趋势及竞争格局与投资研究报告
- 2025-2030年中国边缘滤波器行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国货运管理系统行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国自动导引车行业发展分析及前景趋势与投资战略研究报告
- 2025-2030年中国病床行业市场发展分析及市场需求与投资研究报告
- 2025-2030年中国电子家庭锁行业市场现状供需分析及投资评估规划分析研究报告
- 解剖学公开课课件内分泌
- 家族财富管理
- 高中必修一英语单词湘教版
- 森林防火预警监测
- 银屑病临床病例讨论
- 涉密人员审查备案登记表
- 园林绿化员工安全培训
- 蛙泳教学课件教学课件
- 高层建筑汽车吊吊装作业方案
- 【初中历史】大一统王朝的巩固+课件-2024-2025学年统编版(2024)七年级历史上
- 代理记账公司财务会计管理制度
评论
0/150
提交评论