操作系统课程设计(文件系统管理) (2)
- 格式:docx
- 大小:13.98 KB
- 文档页数:7
操作系统课程设计
文件系统管理
学 院 计算机学院
专 业 计算机科学与技术
班 级
姓 名
学 号
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);在主文件目录中,每个用户目录文件都占有一个目录项,其目录项中包括用户名和指向该用户目录的指针。
本设计主要实现下面几个数据结构:
M D F
用户名
文件目录指针
用户名
文件目录指针
U F D
文件名
保护码
文件长度
文件名
·
·
· A F D
打开文件名
打开保护码
读写指针
总体的流程图如下:
六、详细设计
主要数据结构:
(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");
else
printf("\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;