当前位置:文档之家› 操作系统课程设计文件系统管理)

操作系统课程设计文件系统管理)

操作系统课程设计Array文件系统管理学院计算机学院专业计算机科学与技术班级姓名学号2013年1月8日广东工业大学计算机学院制文件系统管理一、实验目的模拟文件系统的实现的基本功能,了解文件系统的基本结构和文件系统的管理方法看,加深了解文件系统的内部功能的实现。

通过高级语言编写和实现一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作系统命令的实质内容和执行过程有比较深入的了解。

二、实验内容和要求编程模拟一个简单的文件系统,实现文件系统的管理和控制功能。

在用户程序中通过使用文件系统提供的create,open,read,write,close,delete等文件命令,对文件进行操作。

以下报告主要包括:1.可行性分析2.需求分析3.概要设计4.详细设计5.测试6.总结三、可行性分析1、技术可行性对于图形编程还不了解,但是经过本学期的三次实验的练习,可以设计好命令操作界面。

利用大二期间学习的数据结构可以模拟出此课程设计的要求。

2、经济可行性课程设计作为本课程的练习及进一步加深理解。

与经济无关,可以不考虑。

(零花费,零收益)3.法律可行性自己编写的程序,仅为练习,不作其他用途,与外界没什么联系,可行。

四、需求分析编写程序实现文件系统,主要有以下几点要求:1、实现无穷级目录管理及文件管理基本操作2、实现共享“别名”3、加快了文件检索五、概要设计为了克服单级目录所存在的缺点,可以为每一位用户建立一个单独的用户文件目录UFD(User File Directory)。

这些文件目录可以具有相似的结构,它由用户所有文件的文件控制块组成。

此外,在系统中再建立一个主文件目录MFD (Master File Directory);在主文件目录中,每个用户目录文件都占有一个目录项,其目录项中包括用户名和指向该用户目录的指针。

本设计主要实现下面几个数据结构:总体的流程图如下:六、详细设计主要数据结构:(Master File Directory),主要用以存放用户,可以增加存放密码的字符数组,本设计没有保密安全方面的忧虑,为了使用时操作更简单省去密码。

所以,MFD 结构仅包括用户名和指向子目录的一个指针,以及指向下一用户的连接点,为线性结构。

struct MFD{char name[20]; UFD(User File Directory),用于存放文件的数据结构。

由于本设计为了加快检索速度,使用了二叉排序树的结构,所以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");elseprintf("\t");if(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!='2')printf("输入错误,请重新输入!\n");}while(s!='1'&&s!='2');printf("请输入要重写或追加的内容(<100):");scanf("%s",newfile);fflush(stdin);if(s=='1') \t"); stemp=stemp->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;}stemp=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("本文件夹包含以下文件:\n");BSTtraverse(fileBST);}printf("\n");printf(" 1. 创建文件create \n");printf(" 2. 删除文件delete \n");printf(" 3. 打开文件open \n");printf(" 4. 关闭文件close \n");printf(" 5. 读文件read \n");printf(" 6. 写文件write \n");printf(" 0. 返回上一层/注销\n\n");printf("请选择: ");printf("");scanf("%c",&s);fflush(stdin);switch(s){ case '1':fcreate(fileBST);break;case '2':fileBST=fdelete(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 name[30];char flag='0';if(mfd_link==NULL){printf("目前还没有创建用户,请创建后再登陆!"); getch();return;}do{printf("请输入用户名:");scanf("%s",name);fflush(stdin);if(strcmp(name,"cancel")==0)return; 登录 \n"); printf(" 2. 添加新用户 \n"); printf(" 3. 查看已注册用户 \n"); printf(" 0. 退出\n\n");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;case '0':return 1;default:break;}}return 0;}七、测试登录操作:以下为对文件的六个基本操作:无穷级文件、文件路径的显示,以及打开一个不存在的文件的示例:打开普通文件后的情况,此时不能删除文件:本系统未能实现级联删除,操作被禁止:关闭文件后删除操作成功:逐个删除后“文件系统”文件夹也可以删除了:八、总结本次课程设计设计的知识比较广,需要较好的理解能力和编程能力。

相关主题