实验3 文件管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三文件管理
一、实验目的
理解文件系统的主要概念及文件系统内部功能和实现过程。
二、实验内容
采用二级文件目录结构,编写程序实现文件系统的文件存储空间的管理、文件的物理结构、目录结构管理和文件操作。具体如下:
1、设计一个有m个用户的文件系统,每个用户最少可保存一个文件。
2、规定用户在一次运行中只能打开K个文件。
3、系统能检查键入命令的正确性,出错时应能显示出错原因。
4、对文件应能设置保护措施,如只能执行、允许读、允许写等。
5、对文件的操作设计提供一套文件操作:
CREATE建立文件;
DELETE删除文件;
OPEN打开文件;
CLOSE关闭文件;
READ读文件;
WRITE写文件。
三、实验要求
①详细描述实验设计细想、程序结构及各模块设计思路。
②详细描述程序所用数据结构及算法
③给出测试用例及实验结构
④为增加程序可读性,在程序中进行适当注释说明
⑤认真进行实验总结,包括:设计中遇到的问题、解决方法和收获
⑥实验报告撰写要求结构清晰、描述准确逻辑性强
四、实验过程
举例:主文件目录
mfd=record
username :string[maxlen];
files :array[1..K] of ufd;
ofiles :arrau[1..S] of uod
end;
用户打开文件目录表:
uod=record
filename:string[maxlen];
attrib:attrib;
status:(open,create);
rp,up:integer;
end;
用户文件目录:
ufd=record
fielname:string[maxlen];
attrib ro,rw);
len:integer;
addr:integer;
end;
流程图:
二、主要数据结构
界面采用VC6 MFC环境开发
#define MAXUSER 10 //假想文件系统最多支持的人数
#define BLOCKSIZE 32 //虚拟磁盘中物理块为每块32字节
#define DISKSIZE BLOCKSIZE*1000 //虚拟磁盘容量为1000*32=32K
struct UFD //说明文件项的结构数组
{
char FileName[15];
char Time[16]; //文件建立或修改时间如2003/5/6 12:00
bool IsExist; //文件是否存在,删除时标为0
bool IsShared; //共享标记,共享文件可被其它用户所访问
bool AttrRead; //文件是否可读
bool AttrWrite; //文件是否可写
bool AttrExecute; //文件是否可执行
HTREEITEM treeNode; //用于树控件显示的结点句柄
USHORT FileLen; //文件占用字节数
USHORT BlockNum; //文件占用的物理块数
USHORT FileLink[100];//文件物理块地址数组,每块32字节,限定一个文件最大100*32=3200字节
};
struct MFD
{
char UserName[10]; //主目录用户名
bool IsExist; //该用户否存在
UFD ufd[MAXFILE]; //用户文件数组
USHORT nItem;//UFD个数
};
struct HEADBLOCK
{
BYTE pStack; //堆栈指针
SHORT pBlock[10]; //块号 pBlock[10]是下一个盘块号逻辑地址
};
struct BLOCK //虚拟磁盘的物理块数据结构
{
union{
BYTE block[32]; //一块为32字节
HEADBLOCK HeadInfo;
};
};
struct FAT
{
BLOCK SuperBlock; //超级块,指示第一个空闲块逻辑号
USHORT MaxOpen; //该用户同时可打开的最大文件数
USHORT UserNum; //最户数
MFD Mfd[MAXUSER]; //最多可支持10个用户
};
//空闲块成组链接法
bool OpenList[MAXUSER][MAXFILE]; //描述文件是否打开的布尔型数组
FAT FileFAT; //描述文件记录项的FAT结构
CFile FATIO; //负责和VDISK.DAT打交道的文件句柄
CString CurrentUser; //当前登录的用户名
说明:本实验采用模拟文件结构的方法,把记录用户帐号,用户文件和磁盘块的信息用当前目录下的VDISK.DAT来记录,可以把VDISK.DAT看成是一个虚拟的磁盘,其头部是FAT结构,用来记录各个用户和文件信息,紧接着是空闲块成组链接法的数据结构,每块32字节,每组10块,共1000块,也就是说,用户文件数据的总容量是32*1000字节,如果程序当前目录下找不到用于做实验用的VDISK.DAT,在登录时程序会提示是否“格式化虚拟磁盘”也就是新建一个VDISK.DAT文件,接着,程序会显示“用户管理”的窗口,此时应新建几个帐号用于登录做实验。
登录后,程序会显示该用户的所有文件,右方的文件列表会显示每个文件的属性信息,和WINDOWS的“资源管理器”相似。用鼠标双击列表的每个文件就可以查看文件的内容。单击“新建文件”按钮可以创建一个新的用户文件。
选中某个文件后,就可以进行相应的操作,如“修改文件”、“删除文件”或是“打开文件”,删除某个文件时检查该文件的属性,如果是只读的,就是显示警告窗口让用户确认是否一定要删除。
硬盘工具可以用图形方式显示“磁盘”块的详细情况,空白块说明该块没有使用,暗红色的说明块已分配,窗口还统计占用的空间大小、用户数等信息。
程序中用到的结构图如下图所示:
MFD