文件系统实验报告Word文档格式.docx
《文件系统实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《文件系统实验报告Word文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
•文件名
•文件描述符序号
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->
文件%s已经打开!
filename);
pa->
pa=pa->
if(!
pa)
pa=pafd;
pa->
pa=pa->
strcpy(pa->
filename,p->
protect=protect;
if(protect==1)
pa->
else
point=p->
length;
next=NULL;
要打开的文件不存在!
voidclose()//关闭文件命令
UFD*pu=pufd->
请输入要关闭的文件名:
AFD*p=pafd;
AFD*temp;
while(p&
&
if(temp->
protect==2){
while(pu){
if(strcmp(temp->
filename,pu->
pu->
length=temp->
point;
break;
}
pu=pu->
}
文件%s关闭成功!
return;
要关闭的文件没有被打开!
intread()//读文件命令
AFD*p=pafd->
请输入要读的文件名:
请输入要读的长度\n"
point+=length;
文件%s读取成功!
读取失败文件没有打开过!
intwrite()//写文件命令
请输入要写的文件名:
if(p->
protect!
=2){
printf("
文件%s不可写!
return0;
请输入要写的长度\n"
scanf("
文件%s写入成功!
写入失败文件没有打开过!
voiddestroy()//释放内存
MDF*pm=pmdf;
while(pm){
pmdf=pmdf->
free(pm);
pm=pmdf;
while(pa){
pafd=pafd->
free(pa);
pa=pafd;
UFD*pu=pufd;
while(pu){
pufd=pufd->
free(pu);
pu=pufd;
voidsaveUFD()//保存UFD文件
if((fp=fopen(UserUFD,"
w"
fprintf(fp,"
%s%s"
filename,"
\t\t"
%d%s"
protect,"
voidexit()//推出系统
if(pa->
while(pu){
if(strcmp(pa->
pu->
length=pa->
break;
pu=pu->
pa=pa->
saveUFD();
printUFD();
destroy();
voidoperate()//命令识别
charcommand[20];
charname[][8]={"
create"
delete"
open"
close"
"
read"
write"
exit"
};
请输入命令:
command);
if(strcmp(command,name[0])==0)
create();
elseif(strcmp(command,name[1])==0)
_delete();
elseif(strcmp(command,name[2])==0)
open();
elseif(strcmp(command,name[3])==0)
close();
elseif(strcmp(command,name[4])==0)
read();
elseif(strcmp(command,name[5])==0)
write();
elseif(strcmp(command,name[6])==0){
exit();
return;
}else
无效命令.请重新输入:
voidprint()
文件系统\n"
***使用说明***:
本文件系统共有三个用户分别是user1user2user3\n\
系统命令有create,delete,open,close,read,write,exit\
\nexit----------------------------------------退出系统"
intmain()
print();
initMDF();
checkuser();
initAFD();
operate();
//命令识别