docs文件夹中包含了两个文档,第一个是关于任务的详细说明。
第二个文档是关于这次实验实现的详细文档说明。其中有讲解相关的实现思路。
用一个文件来模拟一个磁盘驱动器,并在该磁盘驱动器中存放文件和目录。 在模拟的磁盘驱动器中,利用文件系统的基础理论,管理记录在磁盘驱动器中的内容。
书写一个命令行形式的驱动器内容访问接口,即仿照cmd.exe的形式完成磁盘驱动器中内容的查看。要求实现的命令包括:cd,dir,mkdir,rmdir,create,open,read, write, close, lseek,help,time,ver,rename,import,export。
另外,需要支持从本地磁盘复制内容到虚拟的磁盘驱动器中,也支持从虚拟的磁盘驱动器复制内容到本地磁盘。 比如:
import c:\a.txt .将本地C盘下的a.txt导入到当前目录。export a.txt c:\将当前目录下的a.txt导出到本地C盘。
通过使用多线程,可以实现系统的并发执行和用户交互。一个线程负责接收用户的命令,并将命令转换为消息,通知后台维护虚拟磁盘驱动器的线程进行相应操作。这样可以提高系统的响应性能,并实现多用户同时访问系统的能力。
为了避免多个线程同时访问文件时的冲突,本系统采用互斥锁机制来实现线程间的同步和互斥访问。通过定义了一个名为fileMutex 的互斥锁对象,并在涉及对文件的操作代码块中使用该锁来确保同一时间只有一个线程可以访问文件。
| 命令 | 说明 | 完成情况 |
|---|---|---|
| create | 创建文件 | ✔️ |
| delete | 删除文件 | ✔️ |
| open | 打开文件 | ✔️ |
| read | 读取文件 | ✔️ |
| write | 写入文件 | ✔️ |
| head –num | 显示文件的前num行 | ✔️ |
| tail -num | 显示文件的后num行 | ✔️ |
| lseek | 移动文件指针 | ✔️ |
| flock | 文件加锁,需要实现加锁和解锁功能 | ✔️ |
| move | 移动文件 | ✔️ |
| copy | 拷贝文件 | ✔️ |
| rename | 重命名文件 | ✔️ |
| close | 关闭文件 | ✔️ |
| 命令 | 说明 | 完成情况 |
|---|---|---|
| cd | 改变当前目录 | ✔️ |
| dir | 显示当前目录下的文件和子目录 | ✔️ |
| mkdir | 创建子目录 | ✔️ |
| rmdir | 删除子目录 | ✔️ |
| 命令 | 说明 | 完成情况 |
|---|---|---|
| import | 导入文件(从指定路径) | ✔️ |
| export | 导出文件(从指定路径 | ✔️ |
| help | 显示帮助信息 | ✔️ |
| time | 显示当前时间 | ✔️ |
| ver | 显示版本信息 | ✔️ |
99
使用 CMake 或使用 CLion 直接打开项目运行。
这个项目的首选运行如上。
也可以使用vs2022运行这个cmake项目。
生成的控制台程序如下路径的minios.exe当中
out/build/x64-Debug
这个项目是基于如下的项目进行的开发,根据要求做了进一步的改进。


