模拟文件系统实验报告 下载本文

内容发布更新时间 : 2024/12/24 2:23:33星期一 下面是文章的全部内容请认真阅读。

操作系统大型试验

实验

告姓名:XX 班级:软件工程110x 学号:201126630xxx

一、名称

操作系统大型试验。

二、目的

用C++编写出一个简单的模拟文件系统,实现目录的添加、删除、重命名,文件的添加、删除、重命名、文件和目录、文件的拷贝。

三、要求

开发工具:word,vc win32api

1.设计和实现一个简单的文件系统,要求包括目录、普通文件和文件的存储 2.文件系统的目录结构采用类似Linux的树状结构; 3.要求模拟的操作包括:

a)目录的添加、删除、重命名; b)目录的显示(列表)

c)文件的添加、删除、重命名 d)文件和目录的拷贝

4.用户进入时显示可用命令列表;用户输入help时显示所有命令的帮助文档; 输入某个命令+?时显示该条命令的使用说明

5.用户输入exit时退出该系统 6.实验实现基于windows平台; 7.实验开发语言可以选用C/c++等

四、设计

1.主要思路说明

本模拟系统通过一个大小固定的数组要代表物理盘块,假设共有1024块,新增目录占一块,新增文件占一块,文件中可输入内容,内容假设定义为5个字符占一块,超出则应新申请空间。模拟物理盘块的数组中,数组内容为-99代表改物理盘块内容为空,可使用,其他数字均代表该物理盘块被占用,其中-3代表是占用文件的末结点,其他整数代表是文件内容的下一个寻址下标,另有一个string类型的数组来存储内容,模拟文件写入了对应下标的物理盘块中。设置了一个全局指针指向根结点,一个全局指针指向当前操作目录。搜索空白物理盘块时采用顺序搜索物理盘块数组。存储形式主要采用类似二叉树结构,如目录为根,目录下的第一个文件或目录存在根的子节点,目录下的其他文件或目录存在第一个文件或目录的兄弟节点,以此类推。

本程序仅seperate()函数使用现成代码,此函数功能为将输入命令串分离,仅仅起到美观作用,其余所有代码均为原创!

2.申优功能:

1)能实现动态增长,即当输入文件的内容大小大于分配的模拟物理盘块时系统能够自动寻找空物理盘块并分配,将超出的内容保存在新的物理盘块中,若超出模拟磁盘大小,则超出部分不保存且返回提示。

2)能实现级联删除,即当删除目录(文件夹)时,目录下的所有内容也应当删除并正确释放物理盘块空间。

3)能实现目录的复制,即复制目录时(文件夹)时,该目录下的所有文件和目录也应准确复制至目标目录中,并正确分配物理盘块空间。

3.主要函数和类的定义

1)主要函数定义

#define show_bnum 20 //显示物理盘块的块数

#define block_size 1024 //物理盘块块数 int block[block_size]; //假设有block_size块物理盘块 string content[block_size]; //存放文件内容 int Msize=5; //此处为模拟磁盘大小为输入5个字符 fnode *root=new fnode(\ //设置根目录 fnode *current_path=new fnode(); fnode *seek_flag=new fnode(); fnode *cp_flag=new fnode(); void initialize(); int seekTarget(string name); int seek_log(string name); void delete_node(string name); int freeblock(fnode *); int seekfreeblock(); void show_current_path(); void add_file(string name,int t); void show_curpath_all(); void rename_file(string Oname,string Nname); void seperate(); void cd(); void add_File(); void add_Log(); void delete_file(); void show_memory(); void re_name(); void help(); void show_content(); void write_file(); void Clear_(); void Exit(); void cp(); void cp_log(fnode *target,fnode *source); void cp_file(fnode *target,fnode *source); void cp_node(fnode *target,fnode *source); int find_target_log(); int calculate_logsizeMain(fnode *); int calculate_logsize(fnode *); 2)文件节点类的定义: class fnode { public:

//当前路径 //作为查找标志 //作为复制的位置标志 //初始化 //搜索文件或目录 //搜索目录 //删除节点 //释放物理盘块 //搜索可用物理盘块 //显示当前路径 //增加目录、文件 //显示当前目录下的所有文件//重命名 //分离命令 //进入目录 //增加文件功能入口 //增加目录功能入口 //删除文件或目录功能入口 //显示物理盘块占用情况 //重命名功能入口 //查看帮助 //查看文件内容 //写文件 //清屏 //退出 //复制功能入口 //复制目录 //复制文件 //复制节点 //找到复制的目标目录 //计算目录大小