实验目的:
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位操作系统可以支持更大的文件。
硬件限制: 存储设备的硬件特性也可能对单个文件大小产生影响。某些文件系统和硬件可能限制文件的最大尺寸。
应用程序的限制: 有些应用程序也可能对单个文件大小有限制,这可能是为了确保更好的性能或适应特定的用途。
- 你认为一个设计成功的文件系统应该具备哪些特征?
可靠性: 文件系统应该能够保护数据免受损坏或丢失。这可能包括实现数据冗余、错误检测和纠正等机制。
性能: 文件系统应该提供高效的读写操作,适应不同类型的应用程序和工作负载。
可扩展性: 文件系统应该能够方便地扩展以适应不断增长的存储需求,而无需对整个系统进行大规模更改。
安全性: 文件系统应该提供对数据的访问控制和权限管理,以确保只有授权用户可以访问敏感数据。
兼容性: 文件系统应该能够与多种操作系统和硬件平台兼容,以便用户可以在不同环境中使用。
易用性: 文件系统应该提供用户友好的界面和操作方式,使用户能够轻松管理和使用存储空间。
恢复性: 文件系统应该具备良好的恢复机制,能够在发生错误或故障时快速自愈,以确保数据的完整性和可用性。
实验小结: