资源预览内容
第1页 / 共31页
第2页 / 共31页
第3页 / 共31页
第4页 / 共31页
第5页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
操作系统课程设计班级:姓名:学号:使用语言:C+指导老师:学院:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 31 页 -一、系统要求1、实验目的通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。2、实验内容为linux 系统设计一个简单的二级文件系统。要求做到以下几点:(1)可以实现下列几条命令(至少4 条);login 用户登陆 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件(2)列目录时要列出文件名、物理地址、保护码和文件长度;(3)源文件可以进行读写保护。二、系统分析1、设计思想本文件为二级文件系统,即要实现对文件的增删改查,同时又具备登陆系统、注册用户的功能,各个用户之间的文件系统互不干扰。本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。系统采用结构体来存储用户、文件目录、文件数据内容:0 48*5 48*5+44*50 48*5+44*50+264*200 每个分区都是由结构体组成,每个个去的结构体的个数由格式化系统是决定。整个系统的编码构成主要分为:用户区文件目录区文件数据区名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 31 页 -Allstruct.h 定义了每个分区的结构体;Mysys.h 声明了对系统操作的各种方法;Myuserfile.h 声明了对文件操作的各种方法;Mymain.cpp 整个系统的主函数,操作入口;Mysys.cpp 包含了 mysys.h,实现了操作系统的各种方法;Myuserfile.cpp 包含了 myuserfile.h,实现了操作文件的各种方法;2、主要数据结构Allstruct.h文件的内容:struct s_user /用户区结构体 long isuse;/是否使用char name20;/用户名char psd20;/密码long address;/目录地址;struct s_list/目录结构体 long isuse;/是否使用char name20;/文件名字long myaddress;/本条目录地址long pointaddress;/指向的文件的地址long isfile;/是否锁定long pointsize;/目标文件的大小long nextaddress;/下条目录的地址;struct s_file/文件结构体 long isuse;/是否使用char content256;/文件内容long next;/下个文件块地址;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 31 页 -三、系统执行1、如果首次进入系统,还没有文件系统,则会提示格式化文件系统,创建分区,并初始化分区:2、刚初始化后,没有用户,提示创建用户:3、用户创建成功后出现对系统操作的菜单4、注册用户功能:5、用户登录,登录成功后显示当前用户下的所有文件及其详细信息,同时显示对文件操作的菜单:名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 31 页 -6、新注册的用户默认为没有文件,选择创建文件,并且每次对文件操作后显示当前用户的所有文件和操作菜单:7、此次新建的文件为锁定状态,不能被删除:8、对文件查看,默认创建的时候用0 填充文件内容:名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 31 页 -9、修改文件内容:10、对文件的锁定进行装换:11、删除文件:12、注销登录退出系统:名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 31 页 -四、功能实现Mysys.h#include#include myuserfile.h class MSysterm /封装了管理系统的方法/成员变量private:FILE*myfile;MUser myuser;/成员函数public:MSysterm()void outName();/打印登陆后的用户名int cheack();/检查虚拟文件系统跟是否存在int myformat();/初始化虚拟磁盘int createuser();/创建用户int login();/用户登录void mymain();/主控制程序int logout();/用户注销;Myuserfile.h#include class MUser/封装了管理文件的方法/成员变量public:FILE*myfile;char name20;/用户名char psd20;/密码名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 31 页 -long listaddress;/目录地址long myaddress;/此用户的地址private:long lastaddress;/最后一个目录的地址/成员函数public:int createFile();/增加文件int delFile(char filename20);/删除文件int revampFile(char filename20);/修改文件int mydir();/列出当前目录的所有文件(夹)int viewFile(char filename20);/查看文件int myConversion(char filename20);/转换是否锁定状态private:int isSame(char filename_f20,char filename_s20);Mymain.cpp#include#include#include mysys.h#include using namespace std;int main()char nod1;int n_select=2,i_1=0;MSysterm mysys;/*文件不存在的程序入口*/if(mysys.cheack()=-1)/磁盘空间不存在 cout 虚拟磁盘文件不存在,是否生成?Y/N nod1;cin.clear();/清除流的错误标记cin.ignore(numeric_limits:max(),n);/清空输入流if(nod1=Y|nod1=y)cout 正在创建。endl;if(mysys.myformat()!=1)/创建磁盘空间 cout 创建磁盘空间失败!即将退出。nod1;return 2;cout 创建完成!是否创建用户?Y/N nod1;cin.clear();/清除流的错误标记cin.ignore(numeric_limits:max(),n);/清空输入流if(nod1=Y|nod1=y)if(mysys.createuser()=1)/创建用户名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 31 页 -cout 创建用户成功。endl;else cout 创建用户失败!即将退出。endl;return 3;else cout 匿名用户无法进入系统,正在退出。endl;return 4;else cout 程序已结束!按任意键退出。endl;return 1;/*文件存在的程序入口*/for(;)cout*endl;cout 请选择:endl;cout 1.登录 endl 2.注册 endl 3.退出 endl;cout*n_select;cin.clear();/清除流的错误标记cin.ignore(numeric_limits:max(),n);/清空输入流if(n_select=1)for(int i_1=0;i_1=3;i_1+)/登录 if(mysys.login()=1)cout 登陆成功!欢迎您;mysys.outName();break;else cout 用户名不存在或密码错误!endl;if(i_1=4)cout 非法用户!endl 输入任意键退出。nod1;return 5;break;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 31 页 -if(n_select=2)if(mysys.createuser()=1)/创建用户 cout 创建用户成功。endl;else cout 创建用户失败!endl;if(n_select=3)return 6;mysys.mymain();return 0;Mysys.cpp#include mysys.h#include allstruct.h#include#include#include/用于清除残留的输入流using namespace std;int MSysterm:cheack()/检查虚拟空间是否存在 myfile=fopen(test1.txt,r);if(myfile=NULL)return-1;/返回-1,代表文件不存在 fclose(myfile);return 1;int MSysterm:myformat()int i=1;myfile=fopen(test1.txt,w);if(myfile=NULL)return-1;s_user ms_user;ms_user.isuse=0;s_list ms_list;名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 31 页 -ms_list.isuse=0;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(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(&ms_file,sizeof(ms_file),1,myfile)!=1)/数据区格式化 cout 数据格式信息写入失败!endl;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=fopen(test1.txt,r);for(i=1;i=5;i+,fseek(myfile,44,1),nowaddress+)/检查用户空间是否足够 if(fread(&ms_user2.isuse,4,1,myfile)=0)cout 读取用户空间失败,虚拟磁盘格式错误,可能已被损坏endl;fclose(myfile);return-1;名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 31 页 -if(ms_user2.isuse=0)break;if(i=6)cout 用户空间已满!创建用户失败endl;return-2;for(;)cout 请输入新用户的用户名:ms_user.name;cin.clear();/清除流的错误标记cin.ignore(numeric_limits:max(),n);/清空输入流fseek(myfile,0,0);for(i=1;i=5;i+)/检查用户名 if(fread(&ms_user2.isuse,4,1,myfile)=0)/找到被使用的用户区,下一步读取名字 cout 读取用户空间失败,虚拟磁盘格式错误,可能已被损坏endl;fclose(myfile);return-1;if(ms_user2.isuse=0)fs
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号