《文件操作系统课程设计(西安交大城院)》由会员分享,可在线阅读,更多相关《文件操作系统课程设计(西安交大城院)(62页珍藏版)》请在金锄头文库上搜索。
1、西安交通大学城市学院西安交通大学城市学院 计算机系操作系统课程设计计算机系操作系统课程设计报告报告题目题目: : 2010 级 操作系统课程设计 专业专业: : 计算机科学与信息管理系 班级班级: : 计算机 001 班 姓名姓名: : 曹春 /用户名 bool filepoint; /用户文件目录表中有无文件 的标志 *curuser = NULL,*elseuser=NULL; “用户文件目录表项”UFD 类型数据结构: 作用:定义 UFD 表中的数据块类型(数据块在文件 username.exe 文件中的 存放形式) 定义形式如下: struct UFD char filename32;
2、 /文件名 int safecode; /文件访问权限值 long length; /文件长度 *curfile = NULL;3.1.23.1.2 功能设计功能设计该文件系统是一个多用户,多任务的文件系统 .对用户和用户的文件数目并没 有上限 .也就是说该系统允许任何用户申请空间,而且在其目录下的文件数目并不 做任何的限制 . 该系统可以支持的操作命令如下: clscls用户注销命令 .当使用该命令时,用户退出系统,注销该用户功能设计 并回到登陆界面 ./没有回到登陆界面只是清屏了 命令格式: bye closeclose删除用户注册信息命令 .执行该命令后,用户在系统中的所有信息, 包括该
3、用户目录下的所有文件都被删除 .命令执行完成后返回登陆界面 . 命令格式:close createcreate在当前目录下创建一个文件,且该文件不能跟当前已有的文件重 名 .该文件的管理信息登记在用户文件信息管理模块中 .执行完该命令后回 到执行命令行 . 命令格式:createfile1 其中:”“符为提示符,file1 为要创建的文件名 . deletedelete删除当前用户目录下的一个文件,命令执行完毕返回至命令行 . 命令格式:deletefile1 其中:file1 为要删除的文件名 . listlist显示当前注册目录下的所有文件信息,包括文件名,文件长度,文件 操作权限 . 命
4、令格式:list6 chmodchmod改变某个文件的执行权限,但前提是该文件是该用户目录下的文件 . 命令格式:chmodfile1 . 33:其他用户既有对该文件的读权限又有对该文件的写权限 32:只能读不能写 31:只能写不能读 30:既不能读又不能写 问题:只是有提示没有权限,但是仍能正常的对文件的读写 其中:file1 为要授权的文件名 . openopen在 window 界面下打开某个文件 .执行该命令后,文件 file1 将用在 windows 界面下的文件形式打开 .用户可以在这个方式中对文件进行修改,并 将修改后的内容保存 . 命令格式:openfile1 其中:file1
5、 为要打开的文件名 . readread读文件信息 .将文件信息读入并显示在终端上 . 命令格式:readfile1 其中:file1 为要读的文件名 . writewrite向某个文件写入新的信息 .用户可以选择用覆盖原来内容的方式 或和在文件的末尾追加新信息的方式写入信息 . 当要退出时输入”#”即可 . 返回主菜单命令窗口.3.1.33.1.3 主要功能模块主要功能模块菜单模块 :void Menu(void) 作用:显示调用”登陆界面” 登陆显示模块: int LoginDisplay() 作用:根据 DOS 界面提示,用户选择不同的操作 登陆选择模块 : bool Login(int
6、 SELETE) 作用:通过用户做出的选项执行不同的操作. 显示当前用户文件目录表模块 :void DisplayUFD() 作用:显示出当前用户目录表中的文件清单(文件名,文件长度,访问权限) 分离|识别用户命令模块 :void Command() 作用:将用户输入的命令进行分解,已提供操作系统命令的识别和执行. 用户名命令字符串=“命令关键字字符串”+”目标文件名” 系统命令初始化模块: void KeyWord() 作用:将用户自定义的系统命令,初始化依次(此处的初始化工作,中的命令是 按照 ASCII 码值的大小进行排序的,便于 Command()函数更好的利用”快速查 找算法对用户输
7、入命令的识别操作). 命令执行模块: void Execute(int i,int len,int cmdset) 作用: 将 Command()函数处理过的用户命令的种类的不同,选择调用不同的文 件操作函数,实现不同的功能. 文件访问权限设置模块:void ChangeMod()7作用:修改当前用户文件目录中的文件的访问权限(共四种(只读,只写,既能读 又能写,不能读又不能写) 删除用户模块: void DeleteUser()/删除用户注册目录的操作 作用:删除当前用户,并删除当前用户文件目录中的所有的文件目录项数据块; 删除文件目录表模块: bool ClearUserFile() 作用
8、:实现删除用户操作的第一步:删除当前用户文件目录表 UFD 中的所有的 文件;即 username.exe 文件中为 NULL(没有文件); 删除 MDF 中的主文件目录表项模块:void ClearUserMes() 作用:实现删除用户的第二步,删除主文件目录表 MDF 中的当前用户(即:删除 LOGIN.exe 文件中的当前用户的数据块; 双重功能模块(注销模块):void ByeFile(bool BOOL) 作用:双重功能 BOOL 为 TRUE 时,只是起到刷新 LOGIN.exe 文件中数据块(数据块) BOOL 为 FALSE 时:删除当前用户,服务于 DeleteUser()函
9、数,重新 LOGIN.exe 文件中的数据块; 创建文件模块:void CreatFile() 作用:在当前用户中,新建一个文件 文件打开模块:void OpenFile() 作用:在 window 模式下打开目标文件; 书写新建文件的长度模块:void WriteLengthToFile(int Len,bool BOOL) 作用:实现将新建的文件(或者新写入的文件)的长度,写入到当前的用户文件 目录表(username.exe)文件中的对应的数据快中; 文件长度变更检查模块:bool WriteRight(int len,bool BOOL) 作用:双重功能: BOOL 为 TRUE,计算
10、”累加式写入目标文件”后的文件的长度; BOOL 为 FALSE,计算”覆盖式写入目标文件”后的文件长度; 读文件模块:void ReadFile() 作用:读取目标文件中的内容,显示到 Screen 中(DOS 窗口) 写文件模块:void WriteFile() 作用:将从键盘中键入的字符流(scream)写入到目标文件中; 读写访问权限查询模块 bool QueryMod(bool BOOL) 作用:读|写当前目标文件时,查询当前用户,是否有读|写该文件的权限; 读写文件查询服务模块 bool QueryModElse(bool BOOL,bool 更没有起到注销的作用.) 我的修改:
11、分析错误的原因: bye: 该命令调用的是 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”)库函数,也起到了清屏作用)
12、 修改内容修改内容 2:2: 原程序中的权限设置函数没有起到改用的作用(虽说应经设置了访问权限,但 是非当前用户仍能访问该文件) Chmod 命令涉及到了两个函数: bool QueryMod(bool BOOL) :它的作用是,第一层检查文件的读写访 问权限(只在当前用户文件目录表中查找)+使用第二层权限检查的结 果(在非当前用户目录中权限监测的结构); 我的更改 :只动了 2 句话: 1. if(BOOL_1=QueryModElse(BOOL,flag)/查找 return true; 改为: if(QueryModElse(BOOL,flag) return true; 2. if(f
13、eof(fp1) 改为: 1. if(feof(fp1) 28/-定义的变量 BOOL_1 没有使用 bool QueryModElse(bool BOOL,bool 修改内容修改内容 3:3:原程序,在第一次注册用户后,登陆成功后新建的一个文件,在第二 次登陆后,在用 list 命令查看时,系统中已存在该文件,但是显示为:当前用户 文件目录中为空(已经存在文件不显示); List 命令显示文件提示无文件涉及到两个地方 新用户注册时, curuser-filepoint = false; fwrite(curuser,sizeof(MFD),1,fp); void DisplayUFD() 函
14、数中: if(curuser-filepoint= false) /coutusernamefilepoint=true;没有保存到 LOGIN.exe 文件中 我的修改我的修改: :在该函数的末尾天剑了更新 MDF 表(LOGIN.exe)文件即可 ByeFile(true);/最后:更新 MDF()/自己添加的东西修改内容修改内容 5:5:原程序很多地方不符合常理:比如说删除一个不存在的文件也能删 除成功,修改一个不存在的文件的权限也能修改成功; 错误的原因错误的原因: :在对一个文件的增删改查等操作的时候,没有对当前用文件目 录中的文件进行查找操作! 我的修改我的修改: :自定义了一个在
15、当前用户文件目录中,按文件名查询的函数 void QueryFile(void),返回值为 true,当前用户中有该文件返回值为 false,当前用户中无此文件;这也再将该函数加入到其他功能函数首,执行 前,进行一次判断(是否有目标文件,若是没有该文件,退出操作当前操作);6.26.2 实验改进实验改进新添加系统命令:”.”.” 说明:”-”-改该命令,作用是返回到根菜单目录,已进行其他用户的登 陆|注册|查看|帮助文档|退出系统等操作; 新增函数 QueryFile(void):用户目录表中,文件存在检查函数: 说明:QueryFile()函数实现,在进行文件操作文件曾|删|改|查|读|写等操作 之前,先判断是否有该文件,进而再进行相应的操作,确保命令真实有效 自定义用户函数:void Menu(void)函数 作用:使得返回到跟菜单跟方便,主函数更简单,模块化更强; 新增