实验3 文件管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档