Skip to content

pekingdoncic/File_Manage_System

Repository files navigation

操作系统课程设计(文件管理系统)

1

文档部分说明:

docs文件夹中包含了两个文档,第一个是关于任务的详细说明。

第二个文档是关于这次实验实现的详细文档说明。其中有讲解相关的实现思路。

任务

第一部分 磁盘模拟

用一个文件来模拟一个磁盘驱动器,并在该磁盘驱动器中存放文件和目录。 在模拟的磁盘驱动器中,利用文件系统的基础理论,管理记录在磁盘驱动器中的内容。

第二部分 文件系统实现

书写一个命令行形式的驱动器内容访问接口,即仿照cmd.exe的形式完成磁盘驱动器中内容的查看。要求实现的命令包括:cddirmkdirrmdircreateopenread, write, close, lseekhelptimeverrenameimportexport

另外,需要支持从本地磁盘复制内容到虚拟的磁盘驱动器中,也支持从虚拟的磁盘驱动器复制内容到本地磁盘。 比如:

  • import c:\a.txt . 将本地C盘下的a.txt导入到当前目录。
  • export a.txt c:\ 将当前目录下的a.txt导出到本地C盘。

第三部分 多线程的实现

​ 通过使用多线程,可以实现系统的并发执行和用户交互。一个线程负责接收用户的命令,并将命令转换为消息,通知后台维护虚拟磁盘驱动器的线程进行相应操作。这样可以提高系统的响应性能,并实现多用户同时访问系统的能力。

​ 为了避免多个线程同时访问文件时的冲突,本系统采用互斥锁机制来实现线程间的同步和互斥访问。通过定义了一个名为fileMutex 的互斥锁对象,并在涉及对文件的操作代码块中使用该锁来确保同一时间只有一个线程可以访问文件。

实现效果如下图所示: 1

在一个里面创建一个新的文件,另外一个会自动更新: 3

实现命令

文件类命令:

命令 说明 完成情况
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

说明

这个项目是基于如下的项目进行的开发,根据要求做了进一步的改进。

https://github.com/inannan423/miniOS

About

这是北京林业大学操作系统课程的课程设计,开发了一个文件管理系统

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published