您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 计算机操作系统课程设计
计算机操作系统课程设计班级:计091-1姓名:学号:使用语言:C++指导老师:学院:一、系统要求1、实验目的通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。2、实验内容为linux系统设计一个简单的二级文件系统。要求做到以下几点:(1)可以实现下列几条命令(至少4条);login用户登陆dir列文件目录create创建文件delete删除文件open打开文件close关闭文件read读文件write写文件(2)列目录时要列出文件名、物理地址、保护码和文件长度;(3)源文件可以进行读写保护。二、系统分析1、设计思想本文件为二级文件系统,即要实现对文件的增删改查,同时又具备登陆系统、注册用户的功能,各个用户之间的文件系统互不干扰。本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。系统采用结构体来存储用户、文件目录、文件数据内容:048*548*5+44*5048*5+44*50+264*200每个分区都是由结构体组成,每个个去的结构体的个数由格式化系统是决定。整个系统的编码构成主要分为:用户区文件目录区文件数据区Allstruct.h定义了每个分区的结构体;Mysys.h声明了对系统操作的各种方法;Myuserfile.h声明了对文件操作的各种方法;Mymain.cpp整个系统的主函数,操作入口;Mysys.cpp包含了mysys.h,实现了操作系统的各种方法;Myuserfile.cpp包含了myuserfile.h,实现了操作文件的各种方法;2、主要数据结构Allstruct.h文件的内容:structs_user//用户区结构体{longisuse;//是否使用charname[20];//用户名charpsd[20];//密码longaddress;//目录地址};structs_list//目录结构体{longisuse;//是否使用charname[20];//文件名字longmyaddress;//本条目录地址longpointaddress;//指向的文件的地址longisfile;//是否锁定longpointsize;//目标文件的大小longnextaddress;//下条目录的地址};structs_file//文件结构体{longisuse;//是否使用charcontent[256];//文件内容longnext;//下个文件块地址};三、系统执行1、如果首次进入系统,还没有文件系统,则会提示格式化文件系统,创建分区,并初始化分区:2、刚初始化后,没有用户,提示创建用户:3、用户创建成功后出现对系统操作的菜单4、注册用户功能:5、用户登录,登录成功后显示当前用户下的所有文件及其详细信息,同时显示对文件操作的菜单:6、新注册的用户默认为没有文件,选择创建文件,并且每次对文件操作后显示当前用户的所有文件和操作菜单:7、此次新建的文件为锁定状态,不能被删除:8、对文件查看,默认创建的时候用0填充文件内容:9、修改文件内容:10、对文件的锁定进行装换:11、删除文件:12、注销登录退出系统:四、功能实现Mysys.h#includestdio.h#includemyuserfile.hclassMSysterm{//封装了管理系统的方法//成员变量private:FILE*myfile;MUsermyuser;//成员函数public:MSysterm(){}voidoutName();//打印登陆后的用户名intcheack();//检查虚拟文件系统跟是否存在intmyformat();//初始化虚拟磁盘intcreateuser();//创建用户intlogin();//用户登录voidmymain();//主控制程序intlogout();//用户注销};Myuserfile.h#includestdio.hclassMUser//封装了管理文件的方法{//成员变量public:FILE*myfile;charname[20];//用户名charpsd[20];//密码longlistaddress;//目录地址longmyaddress;//此用户的地址private:longlastaddress;//最后一个目录的地址//成员函数public:intcreateFile();//增加文件intdelFile(charfilename[20]);//删除文件intrevampFile(charfilename[20]);//修改文件intmydir();//列出当前目录的所有文件(夹)intviewFile(charfilename[20]);//查看文件intmyConversion(charfilename[20]);//转换是否锁定状态private:intisSame(charfilename_f[20],charfilename_s[20]);};Mymain.cpp#includestdio.h#includeiostream#includemysys.h#includelimitsusingnamespacestd;intmain(){charnod1;intn_select=2,i_1=0;MSystermmysys;/***********文件不存在的程序入口************/if(mysys.cheack()==-1)//磁盘空间不存在{cout虚拟磁盘文件不存在,是否生成?Y/Nendl;cinnod1;cin.clear();//清除流的错误标记cin.ignore(numeric_limitsstreamsize::max(),'\n');//清空输入流if(nod1=='Y'||nod1=='y'){cout正在创建。。。。endl;if(mysys.myformat()!=1)//创建磁盘空间{cout创建磁盘空间失败!即将退出。endl;cinnod1;return2;}cout创建完成!是否创建用户?Y/Nendl;cinnod1;cin.clear();//清除流的错误标记cin.ignore(numeric_limitsstreamsize::max(),'\n');//清空输入流if(nod1=='Y'||nod1=='y'){if(mysys.createuser()==1)//创建用户{cout创建用户成功。endl;}else{cout创建用户失败!即将退出。endl;return3;}}else{cout匿名用户无法进入系统,正在退出。。。endl;return4;}}else{cout程序已结束!按任意键退出。。。。endl;return1;}}/***********文件存在的程序入口**************/for(;;){cout*********************endl;cout请选择:endl;cout1.登录endl2.注册endl3.退出endl;cout*********************endl;cinn_select;cin.clear();//清除流的错误标记cin.ignore(numeric_limitsstreamsize::max(),'\n');//清空输入流if(n_select==1){for(inti_1=0;i_1=3;i_1++)//登录{if(mysys.login()==1){cout登陆成功!欢迎您;mysys.outName();break;}else{cout用户名不存在或密码错误!endl;}}if(i_1==4){cout非法用户!endl输入任意键退出。endl;cinnod1;return5;}break;}if(n_select==2){if(mysys.createuser()==1)//创建用户{cout创建用户成功。endl;}else{cout创建用户失败!endl;}}if(n_select==3){return6;}}mysys.mymain();return0;}Mysys.cpp#includemysys.h#includeallstruct.h#includeiostream#includestdio.h#includelimits//用于清除残留的输入流usingnamespacestd;intMSysterm::cheack()//检查虚拟空间是否存在{myfile=fopen(test1.txt,r);if(myfile==NULL){return-1;//返回-1,代表文件不存在}fclose(myfile);return1;}intMSysterm::myformat(){inti=1;myfile=fopen(test1.txt,w);if(myfile==NULL){return-1;}s_userms_user;ms_user.isuse=0;s_listms_list;ms_list.isuse=0;s_filems_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);return1;}intMSysterm::createuser()//创建用户{s_userms_user,ms_user2;intnowaddress=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;}if(ms_user2.isuse==0){break;}}if(i==6){cout用户空间已满!创建用户失败endl;return-2;}for(;;){cout请输入新用户的用户名:endl;cinms_user.name;cin.clear();//清除流的错误标记cin.ignore(numeric_limitsstreamsize::max(),'\n');//清空输入流fseek(myfile,0,0);for(i=1;i=5;i++)//检查用户名{if(fread(&ms_user2.isuse,4,1,myfile)==0)//找到被使用的用户区,下一步读取名字{cout读取用户空间失败,虚拟磁盘格式错误,可能
本文标题:计算机操作系统课程设计
链接地址:https://www.777doc.com/doc-7167336 .html