实验目的:
1.?掌握文件系统的基本概念和工作机制
2.?掌握文件系统的主要数据结构的实现
3、掌握软件系统实现算法
实验内容:
设计并实现一个虚拟的一级(单用户)文件系统程序
提供以下操作
1、文件创建/删除接口命令
2、目录创建/删除接口命令
3、显示目录内容命令
算法设计与实现(附流程图和源代码):
申明函数
void?login(void);?用户登录,如果是新用户则创建用户
void?init(void);?程序初始化,将所有i节点读入内存
int?analyse(char?*);?输入参数分析,分析用户命令
void?save_inode(int);?将num号i节点保存到虚拟磁盘文件hd.dat
int?get_blknum(void);?申请一个数据块
void?read_blk(int);?将i节点号为num的文件读入temp
void?write_blk(int);?将temp的内容写入hd.dat的数据区
void?release_blk(int);?释放文件块号为num的文件占用的空间
void?pathset();?打印当前路径
void?deltree(int?innum);?实现删除目录树函数
int?check(int);?检查用户权限
用户命令处理函数
void?help(void);?命令提示帮助函数
void?cd(void);?改变当前目录
void?dir(void);?显示当前目录下所有文件和目录
void?mkdir(void);?创建目录
void?rd(void);?删除目录
void?creat(void);?创建文件
void?open(void);?打开
void?read(void);?读文件
void?write(void);?写文件
void?close(void);?关闭文件
void?del(void);?删除文件
void?logout(void);?用户注销
void?command(void);?命令管理函数
void?format(void);?格式化虚拟磁盘
函数间关系:
流程图:
调试过程及实验结果(附截图):
注册用户
登陆登出
创建/进入目录
创建/打开文件
可以选择打开方式,只读,只写和读写
写文件
初始长度为0,输入想要写入的长度20,以及内容12345678916281294abc
读文件
接下来进行读取,可以看到长度为20,选择起始位置7,选择读取长度10,结果为8916281294,结果正确
删除文件
可以看到,删除文件后,再次打开就会提示文件不存在,而如果输入错命令就会提示指令错误。
删除目录
先输入cd?…进入上级目录,删除之前创建的lzh目录,再次进入就会提示文件夹不存在
格式化
格式化后会清空“磁盘”,同时创建一个新的文件系统。
思考题:
- 单个文件的大小是否为无限的?受到哪个因素限制?
文件系统的限制:?不同的文件系统对单个文件的最大大小有限制。例如,FAT32文件系统通常限制单个文件大小为4GB,而NTFS或exFAT允许更大的文件大小。
操作系统的限制:?操作系统也可能对单个文件大小设置限制。例如,32位操作系统可能限制单个文件大小为2GB,而64位操作系统可以支持更大的文件。
硬件限制:?存储设备的硬件特性也可能对单个文件大小产生影响。某些文件系统和硬件可能限制文件的最大尺寸。
应用程序的限制:?有些应用程序也可能对单个文件大小有限制,这可能是为了确保更好的性能或适应特定的用途。
- 你认为一个设计成功的文件系统应该具备哪些特征?
可靠性:?文件系统应该能够保护数据免受损坏或丢失。这可能包括实现数据冗余、错误检测和纠正等机制。
性能:?文件系统应该提供高效的读写操作,适应不同类型的应用程序和工作负载。
可扩展性:?文件系统应该能够方便地扩展以适应不断增长的存储需求,而无需对整个系统进行大规模更改。
安全性:?文件系统应该提供对数据的访问控制和权限管理,以确保只有授权用户可以访问敏感数据。
兼容性:?文件系统应该能够与多种操作系统和硬件平台兼容,以便用户可以在不同环境中使用。
易用性:?文件系统应该提供用户友好的界面和操作方式,使用户能够轻松管理和使用存储空间。
恢复性:?文件系统应该具备良好的恢复机制,能够在发生错误或故障时快速自愈,以确保数据的完整性和可用性。
实验小结: