文件系统实验报告文档格式.doc

上传人:b****2 文档编号:13965547 上传时间:2022-10-16 格式:DOC 页数:14 大小:123KB
下载 相关 举报
文件系统实验报告文档格式.doc_第1页
第1页 / 共14页
文件系统实验报告文档格式.doc_第2页
第2页 / 共14页
文件系统实验报告文档格式.doc_第3页
第3页 / 共14页
文件系统实验报告文档格式.doc_第4页
第4页 / 共14页
文件系统实验报告文档格式.doc_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

文件系统实验报告文档格式.doc

《文件系统实验报告文档格式.doc》由会员分享,可在线阅读,更多相关《文件系统实验报告文档格式.doc(14页珍藏版)》请在冰豆网上搜索。

文件系统实验报告文档格式.doc

前k个块的剩余部分包含一组文件描述符。

每个文件描述符包含如下信息:

•文件长度,单位字节

•文件分配到的磁盘块号数组。

该数组的长度是一个系统参数。

在实验中我们可以把它设置为一个比较小的数,例如3。

2.目录:

我们的文件系统中仅设置一个目录,该目录包含文件系统中的所有文件。

除了不需要显示地创建和删除之外,目录在很多方面和普通文件相像。

目录对应0号文件描述符。

初始状态下,目录中没有文件,所有,目录对应的描述符中记录的长度应为0,而且也没有分配磁盘块。

每创建一个文件,目录文件的长度便增加一分。

目录文件的内容由一系列的目录项组成,其中每个目录项由如下内容组成:

•文件名

•文件描述符序号

3.对文件的操作:

文件系统需提供如下函数;

create,destroy,open,read,write。

•create(filename):

根据指定的文件名创建新文件。

•destroy(filename):

删除指定文件。

•open(filename):

打开文件。

该函数返回的索引号可用于后续的read,write,lseek,或close操作。

•close(index):

关闭制定文件。

•read(index,mem_area,count):

从指定文件顺序读入count个字节mem_area指定的内存位置。

读操作从文件的读写指针指示的位置开始。

•write(index,mem_area,count):

把mem_area指定的内存位置开始的count个字节顺序写入指定文件。

写操作从文件的读写指针指示的位置开始。

•lseek(index,pos):

把文件的读写指针移动到pos指定的位置。

pos是一个整数,表示从文件开始位置的偏移量。

文件打开时,读写指针自动设置为0。

每次读写操作之后,它指向最后被访问的字节的下一个位置。

lseek能够在不进行读写操作的情况下改变读写指针能位置。

•directory:

列表显示所有文件及其长度。

三.实验过程

创建文件create:

此时显示文件中的文件:

文件的删除delete:

打开文件(open):

文件的写操作(write):

读文件(read):

关闭文件(close):

退出系统(exit):

四.实验代码

#include<

stdio.h>

malloc.h>

stdlib.h>

string.h>

#defineNULL0

typedefstructmdf{//MDF结构体

charusername[20];

//用户名

charfilename[20];

//文件名

structmdf*next;

}MDF;

typedefstructufd{//UFD结构体

intprotect;

//文件保护码

unsignedintlength;

//文件长度

structufd*next;

}UFD;

typedefstructafd{//AFD结构体

unsignedintpoint;

//文件读写指针

structafd*next;

}AFD;

MDF*pmdf;

//全局链表头指针

UFD*pufd;

AFD*pafd;

charUserUFD[20];

//已经登陆成功的用户名

voidinitMDF()//初始化MDF表

{

FILE*fp;

pmdf=(MDF*)malloc(sizeof(MDF));

MDF*p=pmdf;

if((fp=fopen("

MDF"

"

r+"

))==NULL){//打开MDF文件

puts("

theMDFcannotopen!

\n"

);

exit

(1);

}

while(!

feof(fp)){//把MDF文件中的内容装入链表

p->

next=(MDF*)malloc(sizeof(MDF));

p=p->

next;

fscanf(fp,"

%s"

p->

username);

filename);

p->

next=NULL;

fclose(fp);

}

voidprintUFD()//打印MDF表

UFD*p=pufd->

puts("

文件名\t\t保护码\t\t文件长度\n"

while(p){

printf("

\t\t%d"

p->

protect);

\t\t%d\n"

length);

p=p->

voidinitUFD(char*name)//初始化UFD表

pufd=(UFD*)malloc(sizeof(UFD));

UFD*p=pufd;

if((fp=fopen(name,"

))==NULL){

theUFDcannotopen!

feof(fp)){//建立UFD链表

next=(UFD*)malloc(sizeof(UFD));

%d"

&

p->

fgetc(fp);

intcheckuser()//检测登陆的用户名

while

(1){

请输入用户名:

\n"

scanf("

username);

MDF*p=pmdf;

while(p){

if(strcmp(username,p->

username)==0){

strcpy(UserUFD,p->

initUFD(p->

printUFD();

return1;

}

p=p->

}

同户名不存在\n"

voidinitAFD()//初始化AFD

pafd=(AFD*)malloc(sizeof(AFD));

pafd->

boolcreate()//创建文件命令

AFD*pa=pafd;

请输入要创建的文件名:

scanf("

filename);

if(strcmp(filename,p->

filename)==0){

puts("

此文件已经存在了!

return0;

if(!

next)

break;

p=p->

p=p->

strcpy(p->

filename,filename);

protect=2;

length=0;

while(pa->

next){//创建文件后加入到AFD

pa=pa->

pa->

next=(AFD*)malloc(sizeof(AFD));

pa=pa->

strcpy(pa->

filename,filename);

point=0;

return1;

bool_delete()//删除文件命令

请输入要删除的文件名:

UFD*temp;

while(p->

next){

next->

temp=p->

p->

next=p->

free(temp);

printf("

文件%s删除成功!

return1;

要删除的文件不存在!

return0;

boolopen()//打开文件命令

unsignedintprotect;

请输入要打开的文件名:

请输入要打开的文件保护类型:

AFD*pa=pafd->

while(pa){

if(strcmp(filename,pa->

prin

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1