版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
os.采用二级目录实现文件管理PAGEPAGE15操作系统原理课程设计报告题目:采用二级目录实现文件管理所在学院:班级:学号:姓名:指导教师:2013年1月15日目录课程设计目的………………1二、课题内容………………1三、总体路线………………1四、概要设计………………21.数据结构………………22.所使用函数及其功能……3五、详细设计………………41.主函数流程图…………42.创建文件函数流程图……53.删除文件函数流程图……74.分解命令函数流程图……10六、测试、修改及运行结果………………10七、结束语………………13八、参考文献………………14课程设计目的文件系统是现代OS用来存储和管理信息机构,具有按名存取的功能,不仅能方便用户对信息的使用,也有效提高了信息的安全性。本课题模拟文件系统的目录结构,并在此基础上实现文件的各种操作方法。通过本课题,深入理解文件文件目录的作用和功能,掌握文件打开结构,熟悉与文件有关的系统调用,从而更好地掌握文件系统概念。课题内容1.文件目录采用二级目录结构,第一级为主文件目录master_file_directory;第二级为用户文件目录user_file_directory。用户名用户文件目录地址图1master_file_directory结构文件名文件保护方式文件设置长度文件所在地址图2user_file_directory结构2.为加速文件存取,为每个用户建立一张用户打开表fileTable,用以记录该用户当前正在使用的文件。文件名文件长度文件所在地址文件类型创建文件时间图3fileTable结构3.为该系统提供6条操作命令:创建、打开、读、写、关闭、删除等。4.在该模拟系统中,应先建立主文件目录、用户目录和用户打开文件表,然后接受合法用户,给出一个菜单,按用户选择执行相关操作。总体路线1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。在退出这个简单的文件系统时,应将该虚拟文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。2.文件存储空间的分配采用显式链接分配。为了实现创建和删除文件必须要有一棵初始的文件树存在,以便在文件树的根节点下实现创建和删除文件。3.文件目录结构采用二级目录结构。为了简单起见,可以使用文件结构体,结构体内容包括:文件名,文件目录识别标示,文件链接数,以及他的左孩子右孩子左兄弟右兄弟指4.要有分解函数对输入的命令进行分解。以识别那部分是哪部分是命令,哪部分是路径和文件名。5.最后要有执行函数。来执行输入的创建文件命令。四、概要设计数据结构(1)函数中的主要结构体//两级目录结构体typedefstructmaster_file_directory//主文件目录MFD{ charuserName[10]; charpassword[10]; UFD*user;}MFD;MFDuserTable[MaxUser];intused=0;//定义MFD目录中用已有的用户数typedefstructuser_file_directory//用户文件目录文件UFD{ //charfileName[10]; fileTable*file; user_file_directory*next;}UFD;//UFD*headFile;typedefstructfileTable//文件块结构体{ charfileName[10]; intstrat;//文件在磁盘存储空间的起始地址 intlength;//文件内容长度 intmaxlength;//文件的最大长度 charfileKind[3];//文件的属性——读写方式 structtm*timeinfo; boolopenFlag;//判断是否有进程打开了该文件 //fileTable*next;};(2)结构体相互之间的调用关系图:图4结构体关系图模块结构(1)所用函数及其功能:voidInit();//初始化文件树intParseCommand();//接受输入的命令并把其分解成操作名和路径文件名voidExecuteCommand();//执行命令,分别执行edit,del,dir,exit命令inteditComd();//处理edit命令,即创建文件,只要创建表示文件的节点即可,内容及大小不考虑intdelComd();//处理del命令,即删除指定文件,不存在是给出错误信息intdirComd();//处理dir命令。问了能显示的看出创建文件和删除文件是否成功,把根目录的文件都显示出来intFindFilename(charPara2[]);//查找文件名structFileNode*CreateFileNode(charfilename[],intisdir,inti_nlink);//创建结点intGetInput(char*buffer,unsignedintbuffer_len);//获取输入(2)所使用变量structFileNode*cp,*tp,*root;//*cp,*tp,*root是根目录节点charpath[INPUT_LEN-COMMAND_LEN];//记录当前走过的路径charPara1[COMMAND_LEN],Para2[INPUT_LEN-COMMAND_LEN];//para1数组存储输入的命令,para2数组存储输入的文件名charfilename[FILENAME_LEN],tmp;unsignedinti,j;五、详细设计主函数流程图图5主函数流程图创建文件函数流程图图6创建文件函数流程图具体函数实现过程如下:inteditComd(){ //chartmp; structFileNode*temp=CreateFileNode("",0,0); intsign; structFileNode*tp; //路径不能为空 if(strlen(Para2)==0) { printf("\n命令格式有错误.\n"); return0; } //长度检查 if(strlen(Para2)>50) { printf("\n文件名过长\n"); return0; } //格式检查 if(!(isalpha(Para2[0])||Para2[0]=='_'||Para2[0]=='\0'||Para2[0]=='/')) { printf("文件名格式有错!\n");/*文件首字母可以为'字母'或'数字'或'_'或'/'或'回车'*/ return0; } //获取文件名 sign=FindFilename(Para2); if(sign==0) return0; if(cp->isdir!=1)//如当前指针指向的是文件,则报错 { printf("youcannoteditafileinunderafile!\n"); return0; } //创建文件结点,并插入到指定目录下 tp=CreateFileNode("",1,0); strcpy(tp->filename,filename); tp->isdir=0; tp->i_nlink=0; if(cp->child==NULL) { tp->parent=cp; tp->child=NULL; cp->child=tp; tp->sibling_prev=NULL; tp->sibling_next=NULL; } else { temp=cp; //用temp找到新结点插入处 temp=temp->child; while(temp->sibling_next)//findthelastsibingnode { temp=temp->sibling_next; if(strcmp(temp->filename,filename)==0&&temp->isdir==0) { printf("此文件名已存在\n");//重名报错 return0; } }//找到了最后一个结点 temp->sibling_next=tp; tp->parent=NULL; tp->child=NULL; tp->sibling_prev=temp; tp->sibling_next=NULL; } return1;}删除文件函数流程图图7删除函数流程图具体函数实现过程如下:intdelComd(){ // chartmp; intsign; structFileNode*temp; //参数不能为空 if(strlen(Para2)==0) { printf("\n命令格式有错误.\n"); return0; } //获取文件名 sign=FindFilename(Para2); if(sign==0)return0; //用temp指向要删除的结点 if(cp->child) { temp=cp->child; while(temp->sibling_next&&(strcmp(temp->filename,filename)!=0||temp->isdir!=0)) temp=temp->sibling_next; if(strcmp(temp->filename,filename)!=0) { printf("不存在该文件!\n"); return0; } } else { printf("不存在该文件!\n"); return0; } //要删除的不能是目录 if(temp->isdir!=0) { printf("ERROR!该命令只能删除文件,不可删除目录!\n"); return0; } //如仍有用户使用该文件,则不能删除 if(temp->i_nlink!=0) { printf("还有用户共享了该文件,不能删除!\n"); return0; } //删除工作if(temp->parent==NULL)//不是第一个孩子 { temp->sibling_prev->sibling_next=temp->sibling_next; if(temp->sibling_next)//处理是最后一个兄弟的情况 temp->sibling_next->sibling_prev=temp->sibling_prev; temp->sibling_prev=temp->sibling_next=NULL; }//if else//第一个孩子 { if(temp->sibling_next)//处理是最后一个兄弟的情况 temp->sibling_next->parent=temp->parent; temp->parent->child= temp->sibling_next; }//else free(temp); return1;}分解命令函数流程图图8分解命令函数流程图六、测试修改及运行结果1.实际运行结果:初始界面2.键入用户名和密码创建账号登陆文件操作(1)创建文件(2)写文件(3)读文件(4)显示文件(5)关闭文件(6)删除文件七、结束语虽然我们做过很多次课程设计了,但是感觉自己还有好多需要学习的地方,接到题目要求时,设计大体的框架,考虑好所使用的数据结构,然后用高级编程语言分模块的把架子的思路编写出来,调试,运行,再看看是不是符合题目的要求,上网找些资料,看看想想是不是要提高要求,才可以满足实际的需要,最后把收集的劳动成果组合起来,一个小程序终于成型了,虽然每次的过程差不多都一样,但是每次都会有不同的体会。在这中间,敲代码,调试程序的过程比较枯燥,每次思考一个问题很久不能解决的时候,真的很想放弃它,试着找客观的原因,幸好,我的周围有学习好的同学,他们不仅帮我解答了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年会部门经理发言稿
- 测绘服务投标方案(技术标)
- 达英-35对未育女性人工流产术后子宫内膜的影响
- 工作标兵先进事迹材料(10篇)
- 初级会计实务-初级会计《初级会计实务》模拟试卷681
- 初级会计实务-《初级会计实务》模考试卷247
- 城市复杂环境低成本北斗-GNSS高精度单车定位技术研究
- 2024年中国热处理行业深度分析、投资前景、趋势预测报告(智研咨询)
- 补阳还五汤联合杵针治疗腰椎术后残留神经根症状的临床疗效观察
- 二零二五年度废弃包装物处理及资源化利用合同3篇
- 医院消防安全培训课件
- 《00541语言学概论》自考复习题库(含答案)
- 2025年机关工会个人工作计划
- 江苏省南京市、盐城市2023-2024学年高三上学期期末调研测试+英语+ 含答案
- 2024护理不良事件分析
- 光伏项目的投资估算设计概算以及财务评价介绍
- 电力安全工作规程(完整版)
- 2024年湖南省公务员录用考试《行测》试题及答案解析
- 借名买车的协议书范文范本
- 中国古代文学史 马工程课件(下)21第九编晚清文学 绪论
- 2023年铁岭卫生职业学院高职单招(语文)试题库含答案解析
评论
0/150
提交评论