文件管理系统实验报告.docx
- 文档编号:1854536
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:27
- 大小:66.22KB
文件管理系统实验报告.docx
《文件管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《文件管理系统实验报告.docx(27页珍藏版)》请在冰豆网上搜索。
文件管理系统实验报告
姓名
任倩倩
倪晨
学号
2011210590
2011210542
实验成绩
华中师范大学计算机科学系
实验报告书
实验题目:
基于两级目录结构的简单文件系统的管理与操作
课程名称:
操作系统
主讲教师:
叶俊民教授
辅导教师:
叶俊民教授
班级:
1班
实验时间:
2013年12月10日
CDIO性质的实践步骤:
构思性实践(C)
采用两级目录,即设置主文件目录[MFD]和用户文件目录[UED]。
在主文件目录中,每个用户目录都占有一个目录项,其目录项中包含文件名和指向该文件目录文件。
在用户文件目录UFD中,这些文件目录具有相似的结构。
具体测试时可考虑:
设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件,并需要对文件设置保护措施。
(2)设计并实现Create、Open、Read、Write、Close、Delete等文件命令的算法,用户可通过菜单方式或者API方式实现对自己文件的管理。
设计性实践(D)
1、确定基本数据结构,MFD,UFD.,Userinf,Fileinf,File,以及每个数据结构可以进行的对应操作。
2、确定每个函数的参数、返回对象,并且完成每个函数,没完成一个函数,需要进行一次测试。
3、确定用户菜单,并将用户菜单与对应的函数操作进行关联。
4、完整测试每个功能,找出存在的缺陷,并对用户界面做适当调整。
具体可参见本实验报告的“三、实验环境”和“四、实验设计原理”。
实现性实践(I)
1、完成代码编写,形成.c源文件与.exe可执行文件;
2、进行演示,演示应包含所有功能点,将演示结果截图保存;
完成实验报告说明,具体可参见本实验报告的“五、实验详细实现过程与算法流程”、“六、实验调试”和“七、源程序”。
运行性实践(O)
(1)小组成员确定程序需要完成的功能,并详细列出功能点为后期检查程序是否满足需求做准备。
(2)确定编码人员,由编码人员完成基本编码工作,另一人负责对完成的程序进行测试,检查是否满足所有的功能点。
(3)对不满足的功能点或缺少的功能点进行修改或增加,重复第2步,直至符合要求。
(4)完成上机验收。
具体可参见本实验报告的和“九、实验结果分析”和“十一、实验总结”。
(5)实验目的:
为了模拟文件系统实现的基本功能,了解文件系统的基本结构和文件的各种管理方法,加深理解文件系统的内部功能及内部实现,理解文件管理的工作过程,加深各种文件操作命令的实质内容和执行过程的了解,现要求编程模拟一个简单的文件系统,以实现对文件系统的管理和控制功能,支持用户对自己文件的管理与操作。
二、实验内容:
(6)要求本文件系统采用两级目录,即设置主文件目录[MFD]和用户文件目录[UED]。
在主文件目录中,每个用户目录都占有一个目录项,其目录项中包含文件名和指向该文件目录文件。
在用户文件目录UFD中,这些文件目录具有相似的结构。
具体测试时可考虑:
设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件,并需要对文件设置保护措施。
(2)设计并实现Create、Open、Read、Write、Close、Delete等文件命令的算法,用户可通过菜单方式或者API方式实现对自己文件的管理。
三、实验环境:
Windows操作系统、VC++6.0、C语言
(7)实验详细实现过程与算法流程
my_format:
对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。
my_mkdir:
用于创建子目录。
my_rmdir:
用于删除子目录。
my_ls:
用于显示目录中的内容。
my_cd:
用于更改当前目录。
my_create:
用于创建文件。
my_open:
用于打开文件。
my_close:
用于关闭文件。
my_write:
用于写文件。
my_read:
用于读文件。
my_rm:
用于删除文件。
my_exitsys:
用于退出文件系统。
1.打开文件函数fopen()
(1)格式:
FILE*fopen(constchar*filename,constchar*mode)
(2)功能:
按照指定打开方式打开指定文件。
(3)输入参数说明:
filename:
待打开的文件名,如果不存在就创建该文件。
mode:
文件打开方式,常用的有:
"r":
为读而打开文本文件(不存在则出错)。
"w":
为写而打开文本文件(若不存在则创建该文件;反之,则从文件起始位置写,原内容将被覆盖)。
"a":
为在文件末尾添加数据而打开文本文件。
(若不存在则创建该文件;反之,在原文件末尾追加)。
"r+":
为读和写而打开文本文件。
(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变)。
"w+":
首先建立一个新文件,进行写操作,随后可以从头开始读。
(若文件存在,原内容将全部消失)。
"a+":
功能与"a"相同;只是在文件末尾添加新的数据后,可以从头开始读。
另外,上述模式字符串中都可以加一个“b”字符,如rb、wb、ab、rb+、wb+、ab+等组合,字符“b”表示fopen()函数打开的文件为二进制文件,而非纯文字文件。
(4)输出:
一个指向FILE类型的指针。
2.关闭文件函数fclose()
(1)格式:
intfclose(FILE*stream);
(2)功能:
用来关闭先前fopen()打开的一个文件。
此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。
(3)输入参数说明:
stream:
指向要关闭文件的指针,它是先前执行fopen()函数的返回值。
(4)输出:
若关闭文件成功则返回0;有错误发生时则返回EOF并把错误代码存到errno。
3.读文件函数fread()
(1)格式:
size_tfread(void*buffer,size_tsize,size_tcount,FILE*stream);
(2)功能:
读二进制文件到内存。
(3)输入参数说明:
buffer:
用于存放输入数据的缓冲区的首地址;
stream:
使用fopen()打开的文件的指针,用于指示要读取的文件;
size:
每个数据块的字节数;
count:
要读入的数据块的个数;
size*count:
表示要求读取的字节数。
(4)输出:
实际读取的数据块的个数。
4.写文件函数fwrite()
(1)格式:
size_tfwite(constvoid*buffer,size_tsize,size_tcount,FILE*stream);
(2)功能:
将数据写到二进制文件中。
(3)输入参数说明:
buffer:
用于存放输出数据的缓冲区的首地址;
stream:
使用fopen()打开的文件的指针,用于指示要写出的文件;
size:
每个数据块的字节数;
count:
要写出的数据块的个数;
size*count:
表示要求写出的字符数。
(4)输出:
实际写出的数据块的个数。
5.判断文件结束函数feof()
(1)格式:
intfeof(FILE*stream)
(2)功能:
用来判断是否已读取到文件末尾。
(3)输入参数说明:
stream:
使用fopen()打开的文件的指针,用于指示要判断的文件。
(4)输出:
如果已读到文件尾则返回非零值,其他情况返回0。
6主要函数功能实现:
intformat();//格式化磁盘
intmkdir(char*sonfname);//创建子目录
intrmdir(char*sonfname);//删除子目录
intcreate(char*name);//创建文件
intlistshow();//显示子文件信息
intdelfile(char*name);//删除文件
intchangePath(char*sonfname);//更改当前路径
intwrite(char*name);//写入文件
intexit();//退出系统
intopen(char*file);//打开文件
intclose(char*file);//关闭文件
intread(char*file);//读取文件
五、源程序:
#include
#include
#include
#include
usingnamespacestd;
#defineGENERAL1//1代表普通文件2代表目录文件0表示空文件
#defineDIRECTORY2
#defineZero0
structFCB
{
charfname[16];//文件名
chartype;//0空文件1目录文件2空文件
intsize;//文件大小
intfatherBlockNum;//当前的父目录盘块号
intcurrentBlockNum;//当前的盘块
voidinitialize()
{
strcpy(fname,"\0");
type=Zero;
size=0;
fatherBlockNum=currentBlockNum=0;
}
};
constchar*FilePath="C:
\\myfiles";/*常量设置*/
constintBlockSize=512;//盘块大小
constintOPEN_MAX=5;//能打开最多的文件数
constintBlockCount=128;//盘块数
constintDiskSize=BlockSize*BlockCount;//磁盘大小
constintBlockFcbCount=BlockSize/sizeof(FCB);//目录文件的最多FCB数
intOpenFileCount=0;//统计当前打开文件数目
structOPENLIST//用户文件打开表
{
intfiles;//当前打开文件数
FCBf[OPEN_MAX];//FCB拷贝
OPENLIST()
{
files=0;
for(inti=0;i f[i].fatherBlockNum=-1;//为分配打开 f[i].type=GENERAL; } } }; structdirFile/*-------------目录文件结构---------------*/ { structFCBfcb[BlockFcbCount]; voidinit(int_FatherBlockNum,int_CurrentBlockNum,char*name)//父块号,当前块号,目录名 { strcpy(fcb[0].fname,name);//本身的FCB fcb[0].fatherBlockNum=_FatherBlockNum; fcb[0].currentBlockNum=_CurrentBlockNum; fcb[0].type=DIRECTORY;//标记目录文件 for(inti=1;i fcb[i].fa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文件 管理 系统 实验 报告