操作系统课程设计--文件管理系统.doc_第1页
操作系统课程设计--文件管理系统.doc_第2页
操作系统课程设计--文件管理系统.doc_第3页
操作系统课程设计--文件管理系统.doc_第4页
操作系统课程设计--文件管理系统.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 课程名称_操作系统 _题目名称_文件管理系统_ _ 学生学院_计算机学院_专业班级_10级计算机科学与技术5班学 号_3210006071_学生姓名_陈丹飞_指导教师_ _孙为军_ _2013年 1 月 10 日成绩 操作系统课程设计学 院_计算机学院_专 业_计算机科学与技术_学 号_3210006071_姓 名_陈丹飞_指导教师_孙为军_ 日 期_2013/1/10_一、课程设计题目和目的通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。二、课程设计要求通过课程设计,要求学生主要掌握如下内容:(1)设计多用户文件系统,采用多级文件目录。(2)至少要有十个以上的实用命令,应设置文件保护措施。(3)设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息,不需用户打入打入冗长的命令。三、程序设计思想阅读操作系统方面的书籍,了解操作系统的文件系统原理。结合分析课程设计要求,确定实体以及它们之间的关系。实体关系有三张表(磁盘空间分配表、文件表、打开文件表)、一个模拟磁盘的数组、命令服务和用户构成。用户负责输入命令。命令服务实现命令的解释、命令检查、命令帮助以及调用相关模块执行相应的命令功能。此课程设计把TXT文本作来研究对象来模拟操作系统的文件系统工作过程。所以用一个字符串数组来模拟磁盘空间,顾名思义,模拟磁盘提供字符的存储服务。磁盘空间分配表,采用链表结构,每个节点保存模拟磁盘的一个逻辑块的信息,包括块的最大长度,文件占用长度,占用标志。如果占用标志为0,即该空间可分配给文件。初始化磁盘空间分配表链表,首先把整个模拟磁盘作来一块,并置占用位为0.当有进程申请磁盘空间时,从头开始遍历,检查占用位,如果该块为可分配,则检查块大小,若块长度大于或等于申请空间大小,则把块的前一部分(等于申请大小)分配给文件,并置标志位为占用。剩下的大小作来一个新块,作来一个新节点插入到原节点的后边,标志位为可用。这样就实现了模拟磁盘的线性分配。文件表,由于模拟文件系统的文件数量不多,故文件表采用线性表来存储。线性表每个结点存储一个文件的信息。打开文件表,采用数组形式存储打开的文件,数组每个元素保存一个打开文件的信息。文件信息和文件表中的文件信息类似。构造这些实体的关系图,数据流图、程序流程图来进行具体的设计。四、文件系统的实现1.数据结构设计通过分析课程设计要求,具体设计出如下数据结构: char disk10000; /模拟磁盘空间通过一个字符串数组来模拟磁盘空间,数组最大长度设置为10000,即磁盘空间最大容量为10000字节。作为模拟文件系统,主要理解文件系统的原理,可以把文本文件作为对象来研究。故磁盘空间用一个字符串数组来模拟. struct freeDiskTable /碰盘空间分配表int start; /开始位置int length; /占用长度int maxLength; /最大长度int useFlag; /使用标志,1为占用,0为空闲;通过结构体,将磁盘空间使用情况(文件开始位置、占用长度、最大长度、使用标志)结合在一体。一个结构体变量记录磁盘一个块的信息。结构体作为链表的一个节点,设置一个链表将节点连接起来,构成一个磁盘空间分配表。 struct fileTable /文件表char fileName20; /文件名字int start; /开始位置int length; /文件长度int maxLength; /最大长度char fileKind8; /文件种类,此默认为txtstruct tm *timeinfo; /文件创建时间;通过结构体,将文件名字、文件在磁盘的开始位置、文件长度、文件最大长度、文件类型、创建时间结合在一起。文件类型,本模拟程序使用txt类型。设置一个线性表来存储文件。 struct openFileTable / 打开文件表char fileName20; /文件名字char fileKind8; /文件类型int start; /文件开始位置int length; /文件长度int maxLength; /最大长度int openCount; /打开文件的进程数struct tm *timeinfo; /文件创建时间;通过结构体存储打开的文件信息,包括文件名字、文件类型、文件开始位置、文件长度、最大长度、文件打开数和文件创建时间。通过结构体数组存储所有打开文件信息。2.程序功能图 模拟文件系统创建文件删除文件条件读取写入文件查询属性显示内容显示目录重命名文件关闭文件文件系统提供的文件操作有建立文件(create)、删除文件(delete)、条件读取文件(read)、写入文件(write)、查询文件的属性(ask)、显示文件所有内容(type)、重命名文件(ren)、关闭文件(close)。可以通过键盘输入命令来模拟文件的操作。通过exit命令退出程序。3.实体关系图用 户命令服务模拟磁盘磁盘空间分配表文件表打开文件表 命令服务使得用户能够输入命令,在需要时提供命令的帮助。同时能够分析命令,调用相应的命令模块对模拟磁盘、磁盘空间分配表、文件表、打开文件表进行操作。磁盘空间分配表记录模拟磁盘的使用情况。文件表记录文件的信息和在磁盘里的位置等信息。打开文件表记录已打开的文件,对应文件表中的文件信息,和文件表里的文件节点类似,记录了文件在模拟磁盘中的信息。4.数据流图模拟文件系统输入界面显示命令帮助文件表打开文件表磁盘分配表模拟磁盘语境级DFD显示信息文件信息文件信息长度、位置信息文件(字符串)用户命令5.程序流程图模拟文件系统提供的文件操作有建立(create),读取(read),显示(type),删除(detele),写入(write),关闭(close),重命名(ren)和查询(ask)。在模拟程序中可从键盘上输入文件操作命令来模拟各用户程序中所调用的各种文件操作开始初始化命令表初始化文件表初始化磁盘分配表初始化打开文件表输入命令命令表中有该命令?分析命令显示:命令帮助无创建删除读取显示重命名写入查询列表关闭退出程序(exit)执行命令执行命令结束命令(exit)停止程序的执行。五:程序运行界面用户可以通过数字选择进入相应的操作从1-10功能分别是:创建文件删除文件打开文件写文件定位文件修改文件属性复制文件目录管理退出系统以下是对系统功能进行逐项说明1 创建文件从图中可以看出,当输入要创建的文件名和路径后,盘中出现了这个这个文件。然后系统询问是否输入内容,选择是后输入内容+#号结束。输入完毕后用记事本打开刚才创建的文件,显示的就是刚才在文件系统中输入的内容。也可以通过OPEN操作来打开,后面有说明。2 删除文件从图中可以看出,刚才创建的文件已经被删除。为防止误操作,删除前必须先确认。3 打开文件4 写文件这个就是往里面写内容。写入后会覆盖掉以前的内容。5 定位文件定位文件,也就是设置文件状态,1为只读,2为只写。6 修改文件属性延续定位操作,可读的改成可写,可写的改成可读,随你喜欢。但是只能2选1。7 复制文件8 移动文件和复制文件基本一样,只不过这个是剪切:)9 文件目录管理目录管理里又分多个选项:列出目录创建目录删除目录复制目录移动目录与文件操作形式一样,只不过操作对象变成了目录而已,所以不再详细说明。10 退出系统心得体会通过本次的课程设计,使我能够正确运用操作系统课程中所学的基本理论和知识,加深了对文件系统基本概念的理解,以及磁盘文件系统的文件操作。还有让我感受挺深的是对软件工程方法的应用。设计一个软件,先要做好需求分析,这一点很重要,如果没有分析好需求,到软件设计的最后,发现所做的功能不符合要求,那么一切都得重做,前面所有的努力都付诸东流。还有比较重要的是,写好E-R图,至少画出语境级的数据流图,以及仔细画好程流程图。在程序设计的开始,由于分析工作做得不够深入和细致,吃了点小苦头。对于这样一个小设计来说,都会吃苦头,要是大工程更是无法想像,有可能会项目失败。以后得加强对软件工程的学习。另外在运用C语言的时候,感觉有点生疏,在组织语言时时而出错,在编程和调试的过程中,经常会出现意想不到的问题,并非每个问题都可以从相关资料中找到解决方法,有些问题是无法预料到的,这就需要通过自己理性的分析得出问题的解决方案。 在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系统的理论知识,同时在编程时用到了模块化的设计思想,这种编程方法可以使我们的编程变的更简单,可以使我们的查错与纠错变的更方便。总的来说通过这次的设计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设计,使我对操作系统和编程产生兴趣,我想我会在这条路上继续前进下去。我相信,只要不断的严格要求自己,注意培养自己的思维能力,就一定会有更大更辉煌的发展和提高。附程序源代码/*文 件 管 理 系 统*/#include #include /*不容易归类的标准函数库*/#include #include #include #include /*非标准文件输入输出操作的代码符号属性*/#include #include int init() /*初始化操作界面函数*/int i; clrscr(); gotoxy(23,3);printf(* * * * * * * * * * * * * *); gotoxy(27,4);printf(FILE MANAGE SYSTEM); gotoxy(23,5);printf(* * * * * * * * * * * * * *); gotoxy(23,7);printf(丹灰-3210006071-10级计算机科学与技术5班); gotoxy(28,9);printf(1-Creat File); gotoxy(28,10);printf(2-Delete File); gotoxy(28,11);printf(3-OPen File); gotoxy(28,12);printf(4-Write File); gotoxy(28,13);printf(5-Locate File); gotoxy(28,14);printf(6-Modify File); gotoxy(28,15);printf(7-Copy File); gotoxy(28,16);printf(8-Move File); gotoxy(28,17);printf(9-Cataloge Manage); gotoxy(28,18);printf(10-Exit File); gotoxy(25,21); printf(Please Choice:); scanf(%d,&i); return(i); /*选择相应的序号,执行相应的操作*/main()int x,i,j,flag=1; char name15,name115,name240; char choice,ch; int handle,status; /*定义文件的指针和状态*/ FILE *fp; while(flag) /*初始化系统界面*/i=init(); getchar(); switch(i) case 1:label1: /*创建文件操作*/ clrscr(); gotoxy(27,5);printf(CREAT FILEn); for(j=0;j40;j+) printf(= ); printf(nnPlease input the creating file name and routine:n); scanf(%s,name); getchar(); handle=creatnew(name,0);/*按指定的文件方式创建文件,若有同名文件返回错误代码*/ if(handle=-1) printf(nSorry,the file already exists.); getchar(); printf(nInput again?(Y or N); scanf(%c,&choice);getchar(); if(choice=Y|choice=y) goto label1; else printf(nThe file is created.); printf(Do you now input contentof the file?(Y or N):); while(1) /*输入创建文件的内容*/ scanf(%c,&choice); if(choice=y|choice=n|choice=Y|choice=N) break; else printf(nError!Please input again!); if(choice=y|choice=Y) printf(nNow input content to the file(End with #):nn); fp=fopen(name,w);/*把内容存放到fp指向的文件中去*/ ch=getchar(); while(ch!=#) fputc(ch,fp); ch=getchar(); fclose(fp);getchar();/*关闭文件*/ getchar(); break; case 2:label2: /*删除文件的操作*/ clrscr(); gotoxy(25,5);printf(DELETE FILEn); for(j=0;j40;j+) printf(= ); printf(nnPlease input the deleting file name and routine:n); scanf(%s,name); /*输入要删除的文件名*/ getchar(); printf(n Are you sure?(Y or N):); while(1) scanf(%c,&choice); if(choice=y|choice=n|choice=Y|choice=N) break; else printf(nError!Please input again!); if(choice=y|choice=Y) status=access(name,0);/*获取文件的状态,是否存在*/ if(status!=0) printf(nSorry the file doesnt exist!); getchar(); printf(nnInput again?(Y or N); scanf(%c,&choice);getchar(); if(choice=Y|choice=y) goto label2; else status=access(name,02);/*获取文件的状态,是否存在并且是否只读*/ if(status!=0) printf(nSorry the file is only read!); getchar(); else unlink(name); /*从目录中删除一个文件函数,该函数在dos.h中*/ printf(nndelete succefully!); getchar(); getchar(); break; case 3:label3: /*打开文件操作*/ clrscr(); gotoxy(27,5);printf(OPEN FILEn); for(j=0;j40;j+) printf(= ); printf(nnPlease input the opening file name and routine:n); scanf(%s,name); status=access(name,0);/*获取文件的状态*/ if(status!=0) printf(nSorry the file doesnt exist!); getchar(); printf(nnInput again?(Y or N); scanf(%c,&choice);getchar(); if(choice=Y|choice=y) goto label3; else printf(nNow begin to read the file:n); fp=fopen(name,r); ch=fgetc(fp); /*读出文件到内存*/ while(ch!=EOF) printf(%c,ch); ch=fgetc(fp);j+; fclose(fp);getchar();/*关闭文件*/ getchar(); break; case 4:label4: /*写文件操作*/ clrscr(); gotoxy(27,5);printf(WRITE FILEn); for(j=0;j40;j+) printf(= ); printf(nnPlease input the writing file name and routine:n); scanf(%s,name); status=access(name,0);/*获取name指向的文件状态*/ if(status!=0) printf(nSorry the file doesnt exist!); getchar(); printf(nnInput again?(Y or N); scanf(%c,&choice);getchar(); if(choice=Y|choice=y) goto label4; else fp=fopen(name,w);/*以写入方式打开name 指向的文件*/ printf(nPlease input the information(end with #):n); ch=getchar(); /*重写文件*/ while(ch!=#) fputc(ch,fp); ch=getchar(); fclose(fp);getchar();/*关闭文件*/ getchar(); break; case 5:label5: /*定位文件操作*/ clrscr(); gotoxy(27,5);printf(LOCATE FILEn); for(j=0;j40;j+) printf(= ); printf(nnPlease input the locating file name and routine:n); scanf(%s,name); status=access(name,0);/*获取name文件指向的文件的状态*/ if(status!=0) printf(nSorry the file doesnt exist!); getchar(); printf(nnInput again?(Y or N); scanf(%c,&choice);getchar(); if(choice=Y|choice=y) goto label5; else printf(nPlease input the location:); scanf(%d,&x); handle=open(name,O_CREAT|O_RDWR,S_IREAD|S_IWRITE);/*打开由name指定的文件,name既可以是简单的文件名*/ /*也可以是文件的路径名,O_CREAT表示了打开文件的存取代码,若文件不存在,则建立,否则无效。*/ /*O_RDWR表示打开文件用于读写。S_IREAD|S_IWRITE允许读写*/ lseek(handle,x,SEEK_SET);/*该函数把由handle指定的文件的文件指针,移到SEEK_SET(开始位置)再加上x偏移量的地方*/ getchar(); getchar(); break; case 6:label6: /*修改文件属性操作*/ clrscr(); gotoxy(27,5);printf(MODIFY FILEn); for(j=0;j80;j+) printf(= ); printf(nnPlease input the modifying attribution file name and routine:n); scanf(%s,name); status=access(name,0);/*获取文件的状态*/ if(status!=0) printf(nSorry the file doesnt exist!); getchar(); printf(nnInput again?(Y or N); scanf(%c,&choice);getchar(); if(choice=Y|choice=y) goto label6; else printf(nPlease choice:1-READ_ONLY 2-WRITE_ONLY); printf(nnPlease choice the attributione operation:); while(1) scanf(%d,&x); if(x=1|x=2) break; else printf(nError!Please input again!); if(x=1) status=chmod(name,S_IREAD);/*修改文件为“只读”*/ if(status) printf(nSorry!Couldnt make the file read_only!); else printf(n=Made read_only=,name); getchar(); else if(x=2) /*修改文件为“只写”*/ status=chmod(name,S_IWRITE); if(status) printf(nSorry!Couldnt make the file write_only!); else printf(n=Made write_only=,name); getchar(); getchar(); break; case 7:clrscr(); /*复制文件的操作*/ gotoxy(27,5);printf(COPY FILEn); for(j=0;j40;j+) printf(= ); printf(nnPlease input the copying file name and routine:n); scanf(%s,name); getchar(); printf(nPlease input the copyed file name and routine:n); scanf(%s,name1); getchar(); strcpy(name2,copy ); strcat(name2,name); strcat(name2, ); strcat(name2,name1); system(name2); /*系统调用dos指令*/ getchar(); break; case 8:clrscr(); /*移动文件操作*/ gotoxy(27,5);printf(MOVE FILEn); for(j=0;j40;j+) printf(= ); printf(nnPlease input the moving file name and routine:n); scanf(%s,name); getchar(); printf(nPlease input the moving file name and routine:n); scanf(%s,name1); getchar(); strcpy(name2,move ); strcat(name2,name); strcat(name2, ); strcat(name2,name1); system(name2); /*系统调用dos指令*/ getchar(); break; case 9: label9: /*目录管理操作*/ clrscr(); gotoxy(27,5);printf(CATALOGUE MANAGEn); for(j=0;j40;j+) printf(= ); gotoxy(13,9); printf(Please input the moving file name and routine:n); gotoxy(25,11);printf(1-display catalogue); gotoxy(25,12);printf(2-creat catalogue); gotoxy(25,13);printf(3delete catalogue); gotoxy(25,14);printf(4-copy catalogue); gotoxy(25,15);printf(5-move catalogue); gotoxy(25,16);printf(6-exit catalogue); gotoxy(26,20); printf(Please choice:); scanf(%d,&x); while(x6) printf(nError!Please input again!n); scanf(%d,&x); switch(x) case 1: printf(nPlease iuput the displaying catalogue:n); scanf(%s,name);/*先是目录操作*/ strcpy(name2,dir );/*复制dir命令*/ strcat(name2, name); printf(%s,name2); getchar(); system(name2);/*系统调用*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论