《操作系统课程设计(文件系统管理)1.pdf》由会员分享,可在线阅读,更多相关《操作系统课程设计(文件系统管理)1.pdf(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、评定等级评定等级操作系统课程设计操作系统课程设计文件系统管理学院计算机学院专业计算机科学与技术班级姓名学号2013 年 1 月 8 日广东工业大学计算机学院制文件系统管理一、实验目的一、实验目的模拟文件系统的实现的基本功能,了解文件系统的基本结构和文件系统的管理方法看,加深了解文件系统的内部功能的实现。通过高级语言编写和实现一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作系统命令的实质内容和执行过程有比较深入的了解。二、实验内容和要求二、实验内容和要求编程模拟一个简单的文件系统,实现文件系统的管理和控制功能。在用户程序中通过使用文件系统提供的 create,open,read,w
2、rite,close,delete 等文件命令,对文件进行操作。以下报告主要包括:1.可行性分析2.需求分析3.概要设计4.详细设计5.测试6.总结三、可行性分析三、可行性分析1、技术可行性对于图形编程还不了解,但是经过本学期的三次实验的练习,可以设计好命令操作界面。利用大二期间学习的数据结构可以模拟出此课程设计的要求。2、经济可行性课程设计作为本课程的练习及进一步加深理解。与经济无关,可以不考虑。(零花费,零收益)3.法律可行性自己编写的程序,仅为练习,不作其他用途,与外界没什么联系,可行。四、需求分析四、需求分析编写程序实现文件系统,主要有以下几点要求:1、实现无穷级目录管理及文件管理基本
3、操作2、实现共享“别名”3、加快了文件检索五、概要设计五、概要设计为了克服单级目录所存在的缺点,可以为每一位用户建立一个单独的用户文件目录 UFD(User File Directory)。这些文件目录可以具有相似的结构,它由用户所有文件的文件控制块组成。此外,在系统中再建立一个主文件目录 MFD(Master File Directory);在主文件目录中,每个用户目录文件都占有一个目录项,其目录项中包括用户名和指向该用户目录的指针。本设计主要实现下面几个数据结构:本设计主要实现下面几个数据结构:M D FU F DA F D用户名文件名打开文件名文件目录指针保护码打开保护码用户名文件长度读
4、写指针文件目录指针文件名总体的流程图如下:总体的流程图如下:六、详细设计六、详细设计主要数据结构:主要数据结构:(MasterMaster FileFile DirectoryDirectory),主要用以存放用户,可以增加存放密码的字符数组,本设计没有保密安全方面的忧虑,为了使用时操作更简单省去密码。所以,MFD 结构仅包括用户名和指向子目录的一个指针,以及指向下一用户的连接点,为线性结构。struct MFD char name20;UFDUFD(User File DirectoryUser File Directory),用于存放文件的数据结构。由于本设计为了加快检索速度,使用了二叉排
5、序树的结构,所以UFD 结构中相应加入了用于树结构的parent,leftchild,和 rightchild 记录链接情况。当本文件为普通文件时,为下级记录申请AFD(file),folder 为空。同样,当本文件为文件夹时,为它申请相应的空间,AFD 为空。以此来达到无穷级别目录的存储。struct UFD UFD*parent;UFD*leftchild;UFD*rightchild;UFD*folder;);printf(n);temp=temp-link;void BSTtraverse(UFD*fileBST)以区分文件夹 printf(.t);else printf(t);if(
6、fileBST-leftchild!=NULL)创建文件n);printf(2.创建文件夹 n);printf(3.取消 n);printf(请选择:n);scanf(%c,&s);fflush(stdin);if(s=3)return;if(s!=1&s!=2)printf(输入错误,请重新输入!n);while(s!=1&s!=2);if(strcmp(fileBST-name,NULL)=0)n);printf(2.重写 n);printf(3.取消 n);printf(请选择:n);scanf(%c,&s);fflush(stdin);if(s=3)return;if(s!=1&s!=
7、2)printf(输入错误,请重新输入!n);while(s!=1&s!=2);printf(请输入要重写或追加的内容(link;printf(n 是否尝试在共享文件夹中打开(y/n):do s=getchar();if(s=n|s=N)return NULL;else if(s=y|s=Y)break;else printf(输入错误,请重新输入:);while(s!=y&s!=n&s!=Y&s!=N);stemp=share_file;while(stemp!=NULL);if(strcmp(stemp-file-name,name)=0)temp=stemp-file;break;ste
8、mp=stemp-link;return temp;UFD*operations(UFD*fileBST)while(1)char s;system(cls);if(open_file!=NULL)printf(已打开文件,请及时关闭!n);printf(文件名t 文件长度t 读写t 共享t 内容);printf(n);print_open_file();printf(n);printf(当前路径:);print_path(fileBST);printf(n);if(strcmp(fileBST-name,NULL)=0)printf(本层文件为空!n);else printf(本文件夹包含以
9、下文件:n);BSTtraverse(fileBST);printf(n);printf(1.创建文件 createn);printf(2.删除文件 deleten);printf(3.n);printf(4.n);printf(5.n);printf(6.n);printf(0.nn);printf(printf();scanf(%c,&s);请选择:);打开文件 open关闭文件 close读文件 read写文件 write返回上一层/注销 fflush(stdin);switch(s)case 1:fcreate(fileBST);break;case 2:fileBST=fdelete
10、(fileBST);break;case 3:fopen(fileBST);break;case 4:fclose();break;case 5:case 6:fread_write(fileBST,s);break;case 0:return fileBST;default:break;void Log_in()MFD*temp=NULL;char name30;char flag=0;if(mfd_link=NULL)printf(目前还没有创建用户,请创建后再登陆!);getch();return;do printf(scanf(%s,name);fflush(stdin);if(str
11、cmp(name,cancel)=0)return;n);printf(n);请输入用户名:);登 录2.添加新用户 printf(3.查看已注册用户n);printf(0.退 出nn);printf(请选择:);printf();scanf(%c,&s);fflush(stdin);if(s!=0&s!=1&s!=2&s!=3)printf(输入错误,请重新输入:);getch();fflush(stdin);continue;switch(s)case 1:Log_in();break;case 2:Init_user();break;case 3:Check_user();break;c
12、ase 0:return 1;default:break;return 0;七、测试七、测试登录操作:登录操作:以下为对文件的六个基本操作:以下为对文件的六个基本操作:无穷级文件、文件路径的显示,以及打开一个不存在的文件的示例:无穷级文件、文件路径的显示,以及打开一个不存在的文件的示例:打开普通文件后的情况,此时不能删除文件:打开普通文件后的情况,此时不能删除文件:本系统未能实现级联删除,操作被禁止:本系统未能实现级联删除,操作被禁止:关闭文件后删除操作成功:关闭文件后删除操作成功:逐个删除后“文件系统”文件夹也可以删除了:逐个删除后“文件系统”文件夹也可以删除了:八、总结八、总结本次课程设计
13、设计的知识比较广,需要较好的理解能力和编程能力。在本次设计中,花费时间比较多的应该是数据结构的设计与更改了。在开始时仅仅按照实验指导书上的MDF、UFD、AFD 做了相应的数据结构,而且里面包含的数据比较少。初衷是在以后的实现时需要再加进去。但是,在以后加进去的时候发现有不少细节需要增加,例如创建一个文件,需要对里面的各个变量进行初始化,在结构体中增加变量的时候就忘记了其他地方的初始化,顾此失彼。另外,在设计之初是想在 MFD 和 UFD 中增加一个 BST 链接以加快检索的,代码打了一半之后有觉得麻烦,代码过长而把它删除改变,变动比较大。所以,经过这次教训,我觉得以后再设计程序之前就应该考虑
14、到具体的数据结构,尽量想得全面一点,这样后面的修改就可以省不少时间,还有就是,尽量不要改数据结构。以上是关于数据结构的。设计了一个号的数据结构,本课程设计的实现就容易多了,但是某些操作还是需要取舍的。例如在建立共享链的时候,本来是在UFD中再加入一个指针以指示共享文件的,但后来发现一个结构体如果吧太多不相关的变量都放在一起的话会变得很混乱,最后决定另建一个链结构 REC。课程设计对编程能力也肯定是一个不错的锻炼。在设计删除函数和操作函数时,原先我是设计为 void 型的,但是调试的时候发现删除根结点(第一个文件)的时候程序会出错。后来断点检查发现传地址的函数中,其传递的地址不可以在子函数中 free 掉,这样它的主函数中的地址也会被发生改变的,后来想到了给函数返回一个新的地址。总之,本次实验加深了对文件的存储结构的理解,同时还锻炼了C 语言及其数据结构,是一个综合性的实验。