当前位置:文档之家› 文件管理实验报告

文件管理实验报告

char buffer1[64];/*模拟缓冲1*/ //模拟磁盘上的物理块中存放的具体数据
content buffer2[8];/*模拟缓冲2*/ //模拟磁盘上的物理块中存放的目录
FILE *fc; /*模拟磁盘的文件指针*/
sopen(char *name)//在已打开文件表中查找文件name{}
scanf("%s",q1->name );
q1->attribute =1; //用1表示新建的为目录属性
printf("新建目录成功!\n");
return 0;}
cd(content * &p)//进入下一级子目录函数
{content *q,*q1;
char str[3];
q=q1=p;
printf("Please input the name of file(3 letters):\n"); //输入文件名
实验题目文件管理
一.实验目的
本实验模拟操作系统中的建立文件、删除文件、建立目录、显示目录、改变目录和删除目录等操作。通过该实验使学生了解文件系统的基本结构和文件的各种管理方法。
二.实验原理
文件通常存放在外存(如磁盘、磁带)上,可以作为一个独立单位存放和实施相应的操作(如打开、关闭、读、写等)。为了加快对文件的检索,往往将文件控制块集中在一起进行管理。这种文件控制块的有序集合称为文件目录。文件控制块就是其中的目录项。图6-1示例一种目录的组织形式。
printf("Please input the content of the file(less than 100 letters):\n");//输入文件内容
scanf("%s",h[q1->address]); //并将文件内容存放到磁块中
printf("建立文件成功!\n");}
open_file(content * &p) //打开文件
scanf("%s",str );
if (p!=0)
{//P是指向当前目录的指针,不能轻易改变,引入q来代替p
if (q->l!=0)
{if (q->l ->name[0] ==str[0]&&q->l ->name[1] ==str[1]&&q->l ->name[2] ==str[2])//判断文件名与当前目录中的相同名
else
printf("NO folders!\n");
return 0;}
md(content * &p)//新建目录函数
{ content file,*q,*q1;
q=p;
if( q->l==0)
{q->l =q1=(content *)malloc (sizeof(content)); q->l->l=q->l->r=0;} else //判断当前位置以及建立文件的目录
{q2=p->l; //释放时用q2来释放
p->l=p->l->r;//删除文件或目录,即将其从链表中除去
free(q2);
printf("删除成功!\n");}
else //由于目录管理的数据结构为二叉树,所以需要对二叉树进行遍历
{q=q->l;
while(q->r !=0)
if (q->r ->name[0] ==str[0]&&q->r ->name[1] ==str[1]&&q->r ->name[2] ==str[2])
三.实验内容
模拟一个文件系统,包括目录文件,普通文件,并实现对它们的一些基本操作。假定每个目录文件最多只能占用一个块;一个目录项包括文件名(下一级目录名),文件类型,文件长度,指向文件内容(下一级目录)的指针内容。普通文件可以只用目录项(FCB)代表。
四.实验环境
软件环境:Visual C++6.0
if(h[i][99]==0)
{ h[i][99]=1;
return i; //返回数组号,即为盘块号
break; }}
int search(content *p,content file) //查找路径名为name的文件或目录,返回该目录的起始盘块号,P是指向当前目录的指针
{content *q,*q1; //P是指向当前目录的指针,不能轻易改变,引入q来代替p
else //判断当前位置以及建立文件的目录
{q=q->l;
while(q->r !=0)
q=q->r;
q->r=q1=(content *)malloc (sizeof(content));//向内存申请新的空间作为结点
q->r->l=q->r->r=0;//新结点的初使化
}
printf("Please input the name of file(3 letters):\n"); //输入文件名
q=q->r;}}
else
printf("NO folders!\n");//不存在文件或目录显示no folders!
else printf(" <FILE>\n");
q=q->l;//指针指向下一结点
while(q->r!=0)
{printf("%s",q->r->name);
if (q->r->attribute ==1) printf(" <DIR>\n");//判断是文件还是目录
else printf(" <FILE>\n");
else q=q->r;}}}
else
printf("NO folders!");
return 0;}
dir(content * &p) //显示目录及文件
{content *q,*q1;
q=p;
if (q->l!=0)
{printf("%s",q->l->name );
if (q->l->attribute ==1) printf(" <DIR>\n");//判断是文件还是目录
struct tree *l,*r;/*文件或目录的链式结构*/
}content; /*目录结构*/
typedef struct
{int dnum; /*磁盘盘块号*/
int bnum; /*盘块内第几项*/
}pointer; /*已打开文件表中读写指针的结构*/
typedef struct
{char name[2f (q->l ->name[0] ==[0]&&q->l ->name[1] ==[1]&&q->l ->name[2] ==[2])//判断文件名与当前目录中的相同名
{return q->l->address ;//若找到则返回此文件的磁块号}
pointer write;
/*写文件的位置,文件建立时dnum为文件起始盘块号,bnum为"0",打开时为文件末尾*/
}OFILE; /*已打开文件表项类型定义*/
struct
{
OFILE file[N]; /*已打开文件表*/
int length; /*已打开文件表中登记的文件数量*/
}openfile; /*已打开文件表定义*/
char attribute;/*文件的属性,用1个字节表示,所以用了char类型*/
int number; /*文件起始盘块号*/
int length; /*文件长度,文件占用的字节数*/
int flag; /*操作类型,用"0"表示以读操作方式开文件,用"1"表示写操作方式打开文件*/
pointer read; /*读文件的位置,文件刚打开时dnum为文件起始盘块号,bnum为"0"*/
{return q->r->address ;break;}//返回文件的磁块号
else q=q->r;//否则指针指向下一结点,继续遍历
}}}
create_file(content * &p)//建立文件
{ content file,*q,*q1;
q=p;
if( q->l==0)
{q->l =q1=(content *)malloc (sizeof(content)); q->l->l=q->l->r=0;}
{ q2=q->r; //释放时用q2来释放
if(q->r->r!=0) q->r=q->r->r;//删除文件或目录,即将其从链表中除去
else q->r=0; //!!!!!!!!!!!!注意!!!!!!!链表的删除!!!
free(q2);
printf("删除成功!\n");
break;}
else q=q->r;}}}
{ int b;
content file;
printf("Please input the name of file(3 letters):\n");//输入要查找的文件名
scanf("%s", );
相关主题