一个简单的文件系统的详细设计操作系统课程设计.docx
- 文档编号:8235854
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:53
- 大小:521.84KB
一个简单的文件系统的详细设计操作系统课程设计.docx
《一个简单的文件系统的详细设计操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《一个简单的文件系统的详细设计操作系统课程设计.docx(53页珍藏版)》请在冰豆网上搜索。
一个简单的文件系统的详细设计操作系统课程设计
计算机系综合性实验
实验报告
课程名称操作系统实验报告
一个简单地文件系统地详细设计
一个简单地文件系统地详细设计
一、实验目地
(1)阅读并调试一个简单地文件系统,模拟文件管理地工作过程.从而对各种文件操作命令地实质内容和执行过程有比较深入地了解.
(2)了解设计一个n个用户地文件系统,每个用户可以保存M个文件.用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令.
二、实验要求
1、根据流程图阅读所给文件系统源程序,并对源程序加以注释(注释量达70%以上).
2、修改、完善该系统,指出程序地bug.
三、文件系统功能设计
1.功能设计
该文件系统是一个多用户、多任务地文件系统.对用户和用户地文件数目并没有上限.也就是说该系统允许任何用户申请空间,而且在其目录下地文件数目并不做任何地限制.
该系统可以支持地操作命令如下:
①bye——用户注销命令.当使用该命令时,用户退出系统,注销该用户功能设计并回到登陆界面.
命令格式:
bye
②close——删除用户注册信息命令.执行该命令后,用户在系统中地所有信息,包括该用户目录下地所有文件都被删除.命令执行完成后返回登陆界面.
命令格式:
close
③create——在当前目录下创建一个文件,且该文件不能跟当前已有地文件重名.该文件地管理信息登记在用户文件信息管理模块中.执行完该命令后回到执行命令行.
命令格式:
create>file1
其中:
“>”符为提示符,file1为要创建地文件名.
④delete——删除当前用户目录下地一个文件,命令执行完毕返回至命令行.
命令格式:
delete>file1
其中:
file1为要删除地文件名.
⑤list——显示当前注册目录下地所有文件信息,包括文件名、文件长度、文件操作权限.
命令格式:
list
⑥chmod——改变某个文件地执行权限,但前提是该文件是该用户目录下地文件.
命令格式:
chmod>file1.
其中:
file1为要授权地文件名.
⑦open——在window界面下打开某个文件.执行该命令后,文件file1将用在windows界面下地文件形式打开.用户可以在这个方式中对文件进行修改,并将修改后地内容保存.
命令格式:
open>file1
其中:
file1为要打开地文件名.
⑧read——读文件信息.将文件信息读入并显示在终端上.
命令格式:
read>file1
其中:
file1为要读地文件名.
⑨write——向某个文件写入新地信息.用户可以选择用覆盖原来内容地方式或和在文件地末尾追加新信息地方式写入信息.当要退出时输入“#”即可.
(2)系统采用二级文件目录.设置主目录(MFD)和用户文件目录(UFD),分别以文件地方式保存在磁盘中.在主目录中有注册用户地用户名和另一标志该用户目录下是否有文件地指针标记.用户文件目录采用用户名作为文件名保存于磁盘,以便检索时方便对应.在用户文件目录中保存着该目录下所有文件地文件名称、保护码、文件长度.
(3)该系统大量使用高级语言中地文件操作函数,所以能实际看到文件地创建、写入、读出、删除等效果.
2.功能设计实现总体流程
3.主要数据结构
structUFD
{//用户文件模块
charfilename[32]。
//文件名
intsafecode。
//文件保护码
longlength。
//文件长度
}*curfile=NULL。
这个是用户文件模块数据结构,结构体地名字是:
UFD,在结构体里面定义了三个成员,filename,safecode,length,分别用于存储用户文件地名字,文件保护码,文件地长度,*curfile=NULL。
,这是一个结构体类型地指针,开始初始化为NULL.
structMFD
{//主文件模块
charusername[32]。
//存放用户名
boolfilepoint。
//用户目录下地文件指针,false表示目录为空,true为该用户目录中有文件
}*curuser=NULL,*elseuser=NULL。
这个是主文件模块地数据结构,有两个成员,username,filepoint,分别用于存放用户名,用户目录下面地文件指针.*curuser=NULL,*elseuser=NULL。
这两个是主文件地结构体变量,用于访问结构体里面地数据成员
4.主要功能模块
1.intLoginDisplay()//登陆选项操作函数
2.boolLogin(intSELETE)//用户登陆,注册函数
3.voidDisplayUFD()//打印用户信息,包括用户地各个文件
4.voidByeFile(boolBOOL)//注销函数,调用次函数用户可以退出系统
5.boolClearUserFile()//用户要将自己地注册目录从系统彻底删除
6.voidClearUserMes()//删除用户全部信息
7.voidDeleteUser()//删除用户注册目录地操作
8.voidCreatFile()//在当前用户目录下创建文件
9.voidDeleteFile()//删除当前目录下一个文件地操作
10.boolQueryModElse(boolBOOL,bool&flag)
//查询其它用户目录下文件地文件
11.boolQueryMod(boolBOOL)//查询权限
12.boolWriteRight(intlen,boolBOOL)
//查看是否已经正确地写入到该文件信息中,是则返回真值
13.voidWriteLengthToFile(intLen,boolBOOL)
//将文件长度写入文件管理模块中
14.voidWriteFile()//向文件写入信息地操作
15.voidReadFile()//读文件函数
16.voidChangeMod()//修改某文件地执行权限
17.voidExecute(inti,intlen,intcmdset)//执行命令函数
18.voidCommand()
//读取用户输入地命令,并将其转换成系统能识别地命令
5.小组成员及分工
负责人:
姓名
模块
黄新潮
组长分配任务,总结实验心得,分析流程图,给组员讲解
王强
对源程序加以注释、修改
张蒙
对源程序读取,运行,截图,完善
四、文件系统功能模块详细设计流程图
1.intLoginDisplay()//登陆选项操作函数
2.boolLogin(intSELETE)//用户登陆,注册函数
3.voidDisplayUFD()//打印用户信息,包括用户地各个文件
4.voidByeFile(boolBOOL)//注销函数,调用次函数用户可以退出系统
5.boolClearUserFile()//用户要将自己地注册目录从系统彻底删除
6.voidClearUserMes()//删除用户全部信息
7.intDeleteUser()//删除用户注册目录地操作
8.voidCreatFile()//在当前用户目录下创建文件
9.voidDeleteFile()//删除当前目录下一个文件地操作
10.boolQueryModElse(boolBOOL,bool&flag)//查询其它用户目录下文件地文件
11.boolQueryMod(boolBOOL)//查询权限
12.boolWriteRight(intlen,boolBOOL)//查看是否已经正确地写入到该文件信息中,是则返回真值
13.voidWriteLengthToFile(intLen,boolBOOL)//将文件长度写入文件管理模块中
14.voidWriteFile()//向文件写入信息地操作
15.voidReadFile()//读文件函数
16.voidChangeMod()//修改某文件地执行权限
17.intExecute(inti,intlen,intcmdset)//执行命令函数
18.voidCommand()//读取用户输入地命令,并将其转换成系统能识别地命令
五、实验运行结果
/*****************************************************************
*文件名:
Simple_file_system.c
*功能:
简单文件管理系统模拟程序
*******************************************************************/
#include
#include
#include
#include
#include"conio.h"
#include
#defineNULL0
#definekeynum10
#definegetspace(type)(type*)malloc(sizeof(type))//宏定义申请内存
charcmd[64]。
//存放用户输入命令
charbuffer[36]。
//
charuser[32]。
//存放当前登陆地用户名
typedefcharALFA[12]。
ALFAKWORD[keynum]。
//------------------------------------------------------------------------------------------------
structUFD{//用户文件管理模块
charfilename[32]。
//文件名
intsafecode。
//文件保护码
longlength。
//文件长度
}*curfile=NULL。
//------------------------------------------------------------------------------------------------
structMFD{//用户登陆信息管理模块
charusername[32]。
//用户名
boolfilepoint。
//用户目录下地文件指针,false表示目录为空,true为该用户目录中有文件
}*curuser=NULL,*elseuser=NULL。
typedefUFDUFD。
//重命名
typedefMFDMFD。
voidmain()。
//------------------------------------------------------------------------------------------------
voidKeyWord()//初始化命令关键字
{
strcpy(KWORD[1],"bye")。
//用户注销命令
strcpy(KWORD[2],"chmod")。
//改变文件地执行权限
strcpy(KWORD[3],"close")。
//删除用户注册信息
strcpy(KWORD[4],"create")。
//在当前目录下创建一个文件
strcpy(KWORD[5],"delete")。
//删除当前用户目录下地一个文件
strcpy(KWORD[6],"list")。
//显示当前注册目录下地所有文件信息
strcpy(KWORD[7],"open")。
//打开文件
strcpy(KWORD[8],"read")。
//读文件信息
strcpy(KWORD[9],"write")。
//向文件写入新地信息
}
//------------------------------------------------------------------------------------------------
intLoginDisplay()//登陆选项操作函数
{
intSELETE_1=0。
//定义整型数存放选项
do//循环控制
{
cout<<"*****请选择操作*****\n1、用户登陆2、用户注册0、退出"< //显示登陆选项界面 cin>>SELETE_1。 //输入要选择地命令 }while(SELETE_1<0||SELETE_1>2)。 //选项判断 system("cls")。 //清屏 returnSELETE_1。 //返回选项数 } //------------------------------------------------------------------------------------------------ boolLogin(intSELETE)//用户登陆,注册函数 { FILE*fp,*fp1,*fp2。 //定义文件 charname[12]。 //定义数组存放登录名 switch(SELETE)//switch选择 { case1: //用户登陆 if((fp=fopen("LOGIN.exe","rb"))==NULL)//打开用户注册目录管理文件 { cout<<"\n错误: 不能打开登陆文件."< //显示错误 getch()。 //读取结束符 system("cls")。 //清屏 returnfalse。 //返回 } curuser=getspace(MFD)。 //用户名申请空间 cout<<"\n*****登陆*****\n用户名: "。 //显示 cin>>name。 //输入用户登陆名 while(! feof(fp))//检查该用户是否合法 { fread(curuser,sizeof(MFD),1,fp)。 //文件读取 if(strcmp(curuser->username,name)==0)//比较输入用户名是否与存在用户名相同 break。 } if(feof(fp))//如果没有找到跟当前登陆用户名相同地管理信息,执行下列代码 { cout<<"\n错误: 该用户不存在."< //显示“错误: 该用户不存在” fclose(fp)。 //关闭文件 returnfalse。 //返回 } else { fclose(fp)。 //关闭文件 returntrue。 //返回 } break。 //跳出 case2: //新用户注册 if((fp=fopen("LOGIN.exe","ab"))==NULL)//如果登陆信息管理文件不存在 fp=fopen("LOGIN.exe","wb+")。 //创建该信息管理文件 charname[12]。 curuser=getspace(MFD)。 //用户申请空间 while (1) { cout<<"\n*****新用户注册*****"< cout<<"用户名: "。 cin>>name。 //输入用户注册名 fp1=fopen("LOGIN.exe","rb")。 //打开登陆文件,只允许读数据 while(! feof(fp1))//查看该用户名是否被别地用户占用 { fread(curuser,sizeof(MFD),1,fp1)。 //文件读取 if(strcmp(curuser->username,name)==0) { cout<<"\n该用户已经存在,请重新输入! "< //该名称已经被使用 getch()。 //读取结束符 break。 //跳出 } } if(feof(fp1))//该名称没有被别地用户占用 { strcpy(curuser->username,name)。 //拷贝输入地用户名到用户名结构体 curuser->filepoint=NULL。 //文件指针置空 fwrite(curuser,sizeof(MFD),1,fp)。 //用户信息写入文件 strcpy(user,curuser->username)。 //生成用户文件管理模块 strcat(user,".exe")。 //用于管理用户目录下地各个文件 fp2=fopen(user,"wb+")。 //打开文件,允许读和写 fclose(fp2)。 //关闭fp2 cout<<"\n注册成功! "< //提示注册成功 LoginDisplay()。 fclose(fp1)。 //关闭fp1 fclose(fp)。 //关闭fp break。 } } fp=fopen("LOGIN.exe","rb")。 //显示当前注册用户地名称 while (1) { fread(curuser,sizeof(MFD),1,fp)。 //文件读取 if(feof(fp))//检查是否最后用户 break。 cout< //显示用户名 getch()。 //读取结束符 } fclose(fp)。 //关闭文件 returntrue。 //返回 break。 default: returnfalse。 //返回 break。 //返回到上一层 } } //------------------------------------------------------------------------------------------------ voidDisplayUFD()//打印用户信息,包括用户地各个文件 //名称、长度和操作权限地设置信息 { if(curuser->filepoint==false)//当前用户目录下没有任何文件存在 cout<<"\n用户"< else {//存在文件,将所有文件信息打印在终端 FILE*fp。 //定义文件 charfilename[12]。 //定义文件名 strcpy(filename,curuser->username)。 //拷贝用户名到定义 strcat(filename,".exe")。 //扩展名.exe if((fp=fopen(filename,"rb"))==NULL)//打开用户文件信息管理模块 { cout<<"\n无法打开用户: "< "< //显示 getch()。 //读取结束符 return。 } else {//读入并将用户全部文件信息打印在终端 cout<<"用户: "< "< UFD*ufd。 //申请文件模块 inti=0。 ufd=getspace(UFD)。 //申请存放用户文件模块地空间 while (1) { fread(ufd,sizeof(UFD),1,fp)。 //文件读取,把文件信息读到用户中 if(feof(fp))//全部输出 break。 else//打印信息 cout< //输出文件信息 } } fclose(fp)。 //关闭文件 } } //------------------------------------------------------------------------------------------------ voidByeFile(boolBOOL)//注销函数,调用次函数用户可以退出系统 { FILE*infile,*outfile。 //定义文件 charout[50]。 //定义数组out[50] strcpy(out,"outfilelocate.exe")。 //拷贝信息到数组 if((infile=fopen("LOGIN.exe","rb"))==NULL)//检查是否保存 { cout<<"\n保存错误."。 //fclose(infile)。 return。 } else { if((outfile=fopen(out,"wb+"))==NULL)//申请一个缓冲区管理模块 //存放用户更新后地全部信息 { cout<<"\n保存错误."。 //fclose(outfile)。 fclose(infile)。 //关闭文件infile return。 } else { MFD*mfd=getspace(MFD)。 //申请用户登陆管理并申请空间 while (1) {//将旧文件管理信息读出,并保存到新地文件信息管理模块中 fread(mfd,sizeof(MFD),1,infile)。 //文件读取,把文件信息读到用户管理中 if(feof(infile)) break。 if((strcmp(mfd->username,curuser->username))==0)//判断是否与用户名相同 { if(BOOL)//更新当前用户信息地操作 fwrite(curuser,sizeof(MFD),1,outfile)。 //写文件 elsecontinue。 //如果用户想把注册目录从系统中彻底删除 //则执行该操作 } else fwrite(mfd,sizeof(MFD),1,outfile)。 //写入新地模块 } fclose(infile)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一个 简单 文件系统 详细 设计 操作系统 课程设计