1、文件操作系统课程设计西安交大城院西安交通大学城市学院计算机系操作系统课程设计报告题目: 2010级 操作系统课程设计 专业: 计算机科学与信息管理系 班级: 计算机001班 姓名: 曹春&党攀 学号: 10030038 导师: 陆丽娜 教授 成绩: 计算机系制1实验目的1.1目的1:阅读并调试一个简单的文件系统,模拟文件管理的工作过程 .从而对各种文件操作命令的实质内容和执行过程有比较深入的了解 .1.2目的2:了解设计一个n个用户的文件系统,每个用户可以保存M个文件 .用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create ,delete ,open ,close ,
2、read ,write ,exit ,cls ,dir (我的程序中是cls)(查看所有的用户(管理员)等命令 .2.实验要求2.1要求1:阅读所给文件系统源程序,并加注释(注释量达60%),2.2要求2:修改,完善该系统,画出所设计的文件系统的详细流程图 .3.文件系统功能设计3.1总体设计3.1.1主要数据结构 “主文件目录表项”MFD类型数据结构: 作用:定义MDF中的数据块类型(数据块在文件LOGIN.exe文件中的存放形式) 定义形式如下:struct MFD char username32; /用户名bool filepoint; /用户文件目录表中有无文件的标志*curuser
3、= NULL,*elseuser=NULL; “用户文件目录表项”UFD类型数据结构: 作用:定义UFD表中的数据块类型(数据块在文件username.exe文件中的存放形式) 定义形式如下:struct UFD char filename32; /文件名 int safecode; /文件访问权限值 long length; /文件长度*curfile = NULL;3.1.2功能设计该文件系统是一个多用户,多任务的文件系统 .对用户和用户的文件数目并没有上限 .也就是说该系统允许任何用户申请空间,而且在其目录下的文件数目并不做任何的限制 .该系统可以支持的操作命令如下: cls用户注销命令
4、 .当使用该命令时,用户退出系统,注销该用户功能设计并回到登陆界面 ./没有回到登陆界面只是清屏了命令格式: bye close删除用户注册信息命令 .执行该命令后,用户在系统中的所有信息,包括该用户目录下的所有文件都被删除 .命令执行完成后返回登陆界面 .命令格式:close create在当前目录下创建一个文件,且该文件不能跟当前已有的文件重名 .该文件的管理信息登记在用户文件信息管理模块中 .执行完该命令后回到执行命令行 .命令格式:createfile1其中:”“符为提示符,file1为要创建的文件名 . delete删除当前用户目录下的一个文件,命令执行完毕返回至命令行 .命令格式:
5、deletefile1 其中:file1为要删除的文件名 . list显示当前注册目录下的所有文件信息,包括文件名,文件长度,文件操作权限 .命令格式:list chmod改变某个文件的执行权限,但前提是该文件是该用户目录下的文件 .命令格式:chmodfile1 .33:其他用户既有对该文件的读权限又有对该文件的写权限32:只能读不能写31:只能写不能读30:既不能读又不能写问题:只是有提示没有权限,但是仍能正常的对文件的读写其中:file1为要授权的文件名 . open在window界面下打开某个文件 .执行该命令后,文件file1将用在windows界面下的文件形式打开 .用户可以在这个
6、方式中对文件进行修改,并将修改后的内容保存 .命令格式:openfile1其中:file1为要打开的文件名 . read读文件信息 .将文件信息读入并显示在终端上 .命令格式:readfile1其中:file1为要读的文件名 . write向某个文件写入新的信息 .用户可以选择用覆盖原来内容的方式或和在文件的末尾追加新信息的方式写入信息 . 当要退出时输入”#”即可 . 返回主菜单命令窗口.3.1.3主要功能模块 菜单模块 :void Menu(void)作用:显示调用”登陆界面” 登陆显示模块: int LoginDisplay()作用:根据DOS界面提示,用户选择不同的操作 登陆选择模块
7、: bool Login(int SELETE)作用:通过用户做出的选项执行不同的操作. 显示当前用户文件目录表模块 :void DisplayUFD()作用:显示出当前用户目录表中的文件清单(文件名,文件长度,访问权限) 分离|识别用户命令模块 :void Command()作用:将用户输入的命令进行分解,已提供操作系统命令的识别和执行.用户名命令字符串=“命令关键字字符串”+”目标文件名” 系统命令初始化模块: void KeyWord()作用:将用户自定义的系统命令,初始化依次(此处的初始化工作,中的命令是按照ASCII码值的大小进行排序的,便于Command()函数更好的利用”快速查找
8、算法对用户输入命令的识别操作). 命令执行模块: void Execute(int i,int len,int cmdset)作用: 将Command()函数处理过的用户命令的种类的不同,选择调用不同的文件操作函数,实现不同的功能. 文件访问权限设置模块:void ChangeMod()作用:修改当前用户文件目录中的文件的访问权限(共四种(只读,只写,既能读又能写,不能读又不能写) 删除用户模块: void DeleteUser()/删除用户注册目录的操作作用:删除当前用户,并删除当前用户文件目录中的所有的文件目录项数据块; 删除文件目录表模块: bool ClearUserFile()作用:
9、实现删除用户操作的第一步:删除当前用户文件目录表UFD中的所有的文件;即username.exe文件中为NULL(没有文件); 删除MDF中的主文件目录表项模块:void ClearUserMes() 作用:实现删除用户的第二步,删除主文件目录表MDF中的当前用户(即:删除LOGIN.exe文件中的当前用户的数据块; 双重功能模块(注销模块):void ByeFile(bool BOOL)作用:双重功能 BOOL为TRUE时,只是起到刷新LOGIN.exe文件中数据块(数据块) BOOL为FALSE时:删除当前用户,服务于DeleteUser()函数,重新LOGIN.exe文件中的数据块; 创
10、建文件模块:void CreatFile()作用:在当前用户中,新建一个文件 文件打开模块:void OpenFile()作用:在window模式下打开目标文件; 书写新建文件的长度模块:void WriteLengthToFile(int Len,bool BOOL) 作用:实现将新建的文件(或者新写入的文件)的长度,写入到当前的用户文件目录表(username.exe)文件中的对应的数据快中; 文件长度变更检查模块:bool WriteRight(int len,bool BOOL)作用:双重功能: BOOL为TRUE,计算”累加式写入目标文件”后的文件的长度; BOOL为FALSE,计算
11、”覆盖式写入目标文件”后的文件长度; 读文件模块:void ReadFile()作用:读取目标文件中的内容,显示到Screen中(DOS窗口) 写文件模块:void WriteFile() 作用:将从键盘中键入的字符流(scream)写入到目标文件中; 读写访问权限查询模块bool QueryMod(bool BOOL)作用:读|写当前目标文件时,查询当前用户,是否有读|写该文件的权限; 读写文件查询服务模块bool QueryModElse(bool BOOL,bool &flag)作用:是QueryMod()函数的延伸功能模块,进行深层次的权限查询,即查询MDF中(此处指LOGIN.exe
12、文件中)”非当前用户文件目录表中”是否存在目标文件,存在时,是否允许当前用户的读|写权限操作. 3.2总体设计流程图图1 总体设计流程图4. 文件系统功能模块详细设计流程图4.1 菜单模块:(int LoginDisplay( )图2 菜单模块4.2 注册用户模块图3 用户注册模块4.3 用户登陆模块(bool Login(int SELETE)图4 用户登陆模块4.4 用户查询模块(void List_All_user(void)图5 用户查询模块4.5 创建文件模块(void List_All_user(void)图6 穿件文件模块4.6 文件查找模块(void DisplayUFD( )
13、图7 文件查找模块4.7文件删除模块(void DeleteFile( )图8 文件删除模块 4.8更改文件读写权限模块(void ChangeMod( )图9 权限设置模块4.9 写文件模块(void WriteFile( )图10 写文件模块4.10读文件模块(void ReadFile( )图11 读文件模块5.实验运行结果5.1菜单模块运行结果图11 菜单显示5.2注册模块运行结果 成功注册时显示如下:图12 菜单显示 重复注册时,显示如下:图13 注册用户显示5.3登陆模块运行结果 已注册登陆运行结果:图14 登陆成功显示 未注册登陆运行结果图15 登陆异常显示5.4用户查询模块运行
14、结果图16 用户查询显示5.5文件创建模块运行结果图17(a) 文件穿件显示图17(b) 文件穿件显示5.6查看当前用户文件目录表模块运行结果图18(a) 查看当前文件显示图18(b) 查看当前文件显示5.7文件删除模块运行结果图19(a) 文件删除显示图19(b) 文件删除显示5.8权限更改模块运行结果图20 权限更改显示 5.9读|写文件模块运行结果图21(a) 读|写文件显示图21(b) 读|写文件显示6. 系统改进的设想与实现6.1修改内容说明 修改内容1:原程序Bye命令的问题(只起到了清屏的作用,也没有起到返回到主页面的作用;更没有起到注销的作用.) 我的修改: 分析错误的原因:b
15、ye: 该命令调用的是void ByeFile(bool BOOL)该函数是双功能函数:1. BOOL=true,是注销用户,相当刷新了一次LOGIN.exe(MFD)(原程序中,参数不正确)2. BOOL=false.则是删除了当前用户,相当于更新了一次LOGIN.exe(MFD)文件 改进:-新增cls命令(纠正了ByeFile()函数的参数)1. 实现注销操作的功能:自定义:cls命令,替换了bye命令,实现用户文件目录的刷新操作;又因2. 实现清屏的功能:cls命令中添加了(system(“cls”)库函数,也起到了清屏作用) 修改内容2:原程序中的权限设置函数没有起到改用的作用(虽说
16、应经设置了访问权限,但是非当前用户仍能访问该文件) Chmod命令涉及到了两个函数: bool QueryMod(bool BOOL) :它的作用是,第一层检查文件的读写访问权限(只在当前用户文件目录表中查找)+使用第二层权限检查的结果(在非当前用户目录中权限监测的结构);我的更改 :只动了2句话:1. if(BOOL_1=QueryModElse(BOOL,flag)/查找return true; 改为:if(QueryModElse(BOOL,flag)return true;2. if(feof(fp1) & !BOOL_1)return false;改为:1. if(feof(fp1)
17、 & ! !QueryModElse(BOOL,flag)return false;/-定义的变量BOOL_1没有使用 bool QueryModElse(bool BOOL,bool &flag) :该函数是在非当前用户的用户文件目录中,查找目标文件的权限,是否允许当前用户操作; 修改内容3:原程序,在第一次注册用户后,登陆成功后新建的一个文件,在第二次登陆后,在用list命令查看时,系统中已存在该文件,但是显示为:当前用户文件目录中为空(已经存在文件不显示); List命令显示文件提示无文件涉及到两个地方 新用户注册时, curuser-filepoint = false;fwrite(c
18、uruser,sizeof(MFD),1,fp); void DisplayUFD() 函数中:if(curuser-filepoint= false) /cout“n用户 “username“ 文件夹是空的”filepoint=true;没有保存到LOGIN.exe文件中 我的修改:在该函数的末尾天剑了更新MDF表(LOGIN.exe)文件即可ByeFile(true);/最后:更新MDF()/自己添加的东西 修改内容5:原程序很多地方不符合常理:比如说删除一个不存在的文件也能删除成功,修改一个不存在的文件的权限也能修改成功; 错误的原因:在对一个文件的增删改查等操作的时候,没有对当前用文件
19、目录中的文件进行查找操作! 我的修改:自定义了一个在当前用户文件目录中,按文件名查询的函数void QueryFile(void),返回值为true,当前用户中有该文件返回值为false,当前用户中无此文件;这也再将该函数加入到其他功能函数首,执行前,进行一次判断(是否有目标文件,若是没有该文件,退出操作当前操作);6.2实验改进 新添加系统命令:”.”说明:”-改该命令,作用是返回到根菜单目录,已进行其他用户的登陆|注册|查看|帮助文档|退出系统等操作; 新增函数QueryFile(void):用户目录表中,文件存在检查函数:说明:QueryFile()函数实现,在进行文件操作文件曾|删|改
20、|查|读|写等操作之前,先判断是否有该文件,进而再进行相应的操作,确保命令真实有效 自定义用户函数:void Menu(void)函数作用:使得返回到跟菜单跟方便,主函数更简单,模块化更强; 新增帮助文档:可以对当前文件系统的操作指令集展示给用户!6.3作者物语 该系统,是在原来的基础上,进行的,目的不是为了增加其功能,而是为了完善已有功能,了解对”二级文件目录结构”的增/删/改/查/权限设置等操作的实现过程; 由于自己边加注释,边改程序(自己认为原程序有不通的地方,就随笔更改了,因此可能现在找到的程序中的bug要远远少于我自己做的改动!) 我认为文件操作系统(File system)数据结构
21、设计的不是很合理,一下提出自己的理解和猜想我认为,系统主文件目录表(LOGIN.exe)中的数据块,应该采用链表的形式,进行存储,这应便于实现用户的:增/删/改/查等的操作;用户文件目录表中(username.exe)文件中,数据块之间,也应该采用链表的形式存放,这样也实现了方便用户的增/删/改/查操作,减少了代码量和程序员的负担.6.3实现程序(用小六字体打印) ./* * 文件名: Simple_file_system.c* 功 能: 简单文件管理系统模拟程序 * 作 者: 计算机001-曹春* 指导老师: 西安交通大学 陆丽娜 教授* 时 间: 2013年3月31日*/#include#
22、include#include#include#include conio.h#include#define NULL 0#define keynum 11 /共有11中系统命令#define getspace(type) (type*)malloc(sizeof(type) /申请磁盘空间大小为type类型变量所占磁盘大小的空间char cmd64; /存放用户输入命令char buffer36; /文件名称长度不能超过36个字符char user32; /存放当前登陆的用户名/经典定义:typedef char ALFA12;ALFA KWORDkeynum;char Administra
23、tor20;/以上两句话的意思:就是说-KWORD中的每一个元素相当于一个长度为12的字符数组,而且数组名为KWORDi/-struct UFD/用户文件管理模块 char filename32; /文件名 int safecode; /文件保护码 long length; /文件长度*curfile = NULL;/用户文件目录表(username.exe)-就是将一个个儿UFD类型的用户文件目录表(username.exe)项(即UFD类型的数据块)依次写到了一个文件中(usernamespace.exe)/-struct MFD /用户登陆信息管理模块 char username32;
24、/用户名 bool filepoint; /用户目录下的文件指针,false表示目录为空,true为该用户目录中有文件*curuser = NULL,*elseuser=NULL; /MFD主文件目录中存放的值只是用户的名称/-主文件目录表-就是将一个个MDF类型主文件目录表( 即MDF类型的数据块)项写到了一个文件中(LOGIN.exe)typedef UFD UFD;typedef MFD MFD;void DisplayUFD();void ByeFile(bool BOOL);int LoginDisplay() ;void Menu(void);bool QueryFile(void
25、);void WriteLengthToFile(int Len,bool BOOL);void main();/-void ListAllFile()/显示当前用户文件目录下的所有的文件UFD表 DisplayUFD();/-bool QueryFile(void) /查找当前用户中是否存在目标文件 FILE *fp; char user50; UFD *ufd = getspace(UFD); strcpy(user,curuser-username); strcat(user,.exe); /得到当前用户的用户名username.exe文件 if(fp=fopen(user,rb)=NU
26、LL) fclose(fp); return false; while(1) fread(ufd,sizeof(UFD),1,fp); /逐个的读取当前用户文件目录中的文件 if(strcmp(ufd-filename,buffer)=0)&!feof(fp) ) /在当前用户文件目录表中找到了该文件(即该文件属于本用户文件目录表) fclose(fp); return true; /返回真值-当前用户目录下找到了该文件 else fclose(fp); return false; /-bool QueryModElse(bool BOOL,bool &flag) /查询当前被操作的文件是否是LOGIN.exe文件中非当前用户文件目录表以外的用户文件目录表中的文件 /若是其他用户文件目录中的文件,再检查是否允许被当前用户读或者写? FILE *fp; char user50; UFD *ufd = getspace(UFD); /elseuser表示除当前用户外的任何一个用户文件目录表文件 strcpy(user,elseuser-username); strcat(user,.exe); /得到非当前:用户文件目录表名 if(fp=fopen(user,rb)=NULL) /以读方式打开非当前用户的文件目录表时,文件发生错误! fclose
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1