# 1.实验要求
1. 设计和实现一个模拟文件系统,要求包括目录、普通文件和文件的存储。。
2. 文件系统的目录结构采用类似Linux的树状结构。
3. 要求模拟的操作包括:
- 目录的添加、删除、重命名;
- 目录的显示(列表);
- 文件的添加、删除、重命名;
- 文件和目录的拷贝;
- 文件的读写操作。
1. 用户进入时显示可用命令列表;用户输入help时显示所有命令的帮助文档;
输入某个命令+?时显示该条命令的使用说明。
2. 用户输入exit时退出该系统。
3. 实验实现基于LINUX平台。
4. 实验开发语言必须选用C/C++,不能选用JAVA。
# 2.实验环境
- 调试环境:
- 操作系统:Ubuntu 16.04 TLS;
- 内存:3.5GiB
- 处理器:AMD E-350 Processor×2
- 图形:AMD PALM(DRM 2.50.0/4.15.0-45-generic,LLVM 6.6.6)
- 操作系统类型:64位
- 磁盘:30.4GB
- 开发环境:
- 开发工具:Visual Studio 2017;
- 操作系统:Windows 10 家庭中文版;
- 处理器:Inter(R) Core(TM) i7-8565u CPU \@ 1.8GHz 1.99 GHz;
- 内存:8.00 GB;
- 系统类型:64位操作系统,基于x64的处理器。
# 3.实验设计
## 3.1系统流程
整体系统操作模拟Ubuntu命令行,具体流程如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201016112506877.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMxODE5Mg==,size_16,color_FFFFFF,t_70#pic_center)
## 3.2文件结构
整体系统采用属性结构组织文件,具体图示如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201016111224166.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMxODE5Mg==,size_16,color_FFFFFF,t_70#pic_center)
## 3.3实现的命令
| 命令 | 用法 | 说明 | 选项 |
|--------|---------------------------------|----------------------------------------|------------------------------------------------------------------------------------------------------------|
| cd | cd [dir] | 显示当前目录名或改变当前目录 | 无 |
| ls | ls [dir] | 显示当前或指定路径下所有文件和目录 | 无 |
| mkdir | mkdir dir | 在当前目录下建立一个新目录 | 无 |
| touch | touch file | 在当前目录下新建一个新文件 | 无 |
| gedit | gedit file | 读写指定的文件 | 无 |
| rm | rm -d\|-f file\|dir | 删除指定的目录或文件 | \-d:删除目录 -f:删除文件 |
| cp | cp -d\|-f\|-cd\|-cf SOURSE DEST | 从原路径复制一个文件或目录到目的路径下 | \-d:复制目录 -f:复制文件 -cd:复制目录,但不在原路径下保留原目录 -cf:复制文件,但不在原路径下保留原文件 |
| rename | rename -d\|-f oldname newname | 更改指定文件或目录的名字 | \-d:重命名目录 -f:重命名文件 |
| su | su | 更改当前用户 | 无 |
| cls | cls | 清屏 | 无 |
| exit | exit | 退出文件系统 | 无 |
| help | help | 显示帮助文档 | 无 |
# 4.数据结构
为简化代码结构,系统未采用面向对象编程的思想。将用户、文件、目录分别封装成一个struct结构体。
## 4.1 用户数据结构
```cpp
struct user
{
string name;//用户名
string password;//密码
};
```
说明:用户结构体中包含用户的用户名以及密码。
## 4.2 文件数据结构
```cpp
struct file
{
string name;//文件名
vector<string> content;//文件内容
user owner;//文件所有者
};
```
说明:文件结构体包含文件名、文件内容以及文件所有者。需要特别指出的是,目前系统实现的多用户权限可以概括为:文件创建者为文件所有者,非文件所有者可以知道该文件的存在,但不能对该文件执行读写、复制、删除等操作。
## 4.3 目录数据结构
```cpp
struct dir {
string name;//目录名
dir* pre;//父目录
map<string, file*> files;//所包含的文件
map<string, dir*> next;//子目录
};
```
说明:目录结构体包含目录名、父目录、当前目录下的文件以及直接子目录。其中,为方便代码编写,后两个成员使用map容器包装,其中map的first为文件名(或目录名),second为对应的文件指针(或目录指针)。
# 5.模块详解
## 5.1 用户指令
以下按3.3节展开。
### 5.1.1 cd
- 说明:显示当前目录的绝对路径或改变当前目录。
- 流程图:
![](https://img-blog.csdnimg.cn/20201016111852850.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMxODE5Mg==,size_16,color_FFFFFF,t_70#pic_center)
- 关键代码:
```cpp
//cd
void cd(string name) {
if (name == "") {
//显示当前目录的绝对路径
}
else {
dir* tmp = pathTrans(name);//解析路径
if (tmp == NULL) {
cout << "No Such Directory.\n";
}
else {
curdir = tmp;//进入用户输入的路径
}
}
}
```
### 5.1.2 ls
- 说明:显示当前目录下或指定路径下所有文件和目录。
- 流程图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201016112055214.png#pic_center)
- 关键代码:
```cpp
//ls
void ls(string path) {
dir *tmp = curdir;
if (path != "") {
curdir = pathTrans(path);//解析路径
if (curdir == NULL) {
//输出错误提示
}
}
//遍历输出文件和目录信息
for (auto it = curdir->files.begin(); it != curdir->files.end(); it++) {
}
for (auto it = curdir->next.begin(); it != curdir->next.end(); it++) {
}
curdir = tmp;
}
```
### 5.1.3 mkdir
- 说明:在当前目录下建立一个新目录。
- 用法:mkdir dir,其中dir表示新建目录的目录名。
- 流程图:
![](https://img-blog.csdnimg.cn/20201021134154805.png#pic_center)
- 关键代码:
```cpp
//创建目录
void mkdir(string name) {
if (name == "") {
co
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++实现的模拟Linux文件系统源码+详细项目文档,含目录、普通文件和文件的存储,目录结构采用类似Linux的树状结构
共32个文件
tlog:6个
dat:3个
pdb:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 201 浏览量
2023-10-27
10:05:49
上传
评论
收藏 36.95MB ZIP 举报
温馨提示
设计和实现一个模拟文件系统,要求包括目录、普通文件和文件的存储。 文件系统的目录结构采用类似Linux的树状结构。 要求模拟的操作包括: 目录的添加、删除、重命名; 目录的显示(列表); 文件的添加、删除、重命名; 文件和目录的拷贝; 文件的读写操作。 用户进入时显示可用命令列表;用户输入help时显示所有命令的帮助文档; 输入某个命令+?时显示该条命令的使用说明。 用户输入exit时退出该系统。 实验实现基于LINUX平台。 实验开发语言必须选用C/C++
资源推荐
资源详情
资源评论
收起资源包目录
FileSystem-master.zip (32个子文件)
FileSystem-master
文件系统
record - 副本.txt 53B
tmp.dat 16B
文件系统.vcxproj 6KB
user.dat 23B
save.bin 28B
文件系统.vcxproj.user 218B
filesystem.cpp 19KB
record.txt 53B
源.cpp 18KB
文件系统.vcxproj.filters 927B
Debug
vc141.pdb 932KB
vc141.idb 507KB
源.obj.enc 1.99MB
源.obj 2.03MB
文件系统.log 1KB
文件系统.tlog
CL.write.1.tlog 416B
文件系统.lastbuildstate 244B
CL.command.1.tlog 644B
link.command.1.tlog 1KB
link.read.1.tlog 4KB
link.write.1.tlog 400B
CL.read.1.tlog 22KB
record.dat 78B
.vs
文件系统
v15
Browse.VC.db 36.31MB
.suo 45KB
ipch
AutoPCH
89b2dfd1f3d27413
FILESYSTEM.ipch 69.13MB
7e01b5698d554240
源.ipch 46.5MB
文件系统.sln 1KB
Debug
文件系统.pdb 1.25MB
文件系统.ilk 1.17MB
文件系统.exe 376KB
README.md 32KB
共 32 条
- 1
资源评论
云哲-吉吉2021
- 粉丝: 3205
- 资源: 1130
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SSCMS登录模块需要的JS文件
- JSP网络购物中心毕业设计(源代码+论文).rar
- 白盒测试报告.docx
- 基于LM5117芯片评估开发板硬件参考设计(原理图+PCB)+中英文数据手册资料.zip
- 照片批量重命名软件(文件批量修改图片文件名)
- app.apk
- 人工智能(AI)是计算机科学的一个分支,旨在开发和应用能够模拟、延伸和扩展人类智能的理论、方法和技术,包括机器人、语言识别、图像
- 嵌入式与物联网开发是当今信息技术领域的两大重要分支,它们相互交织,共同推动着智能化时代的进步 嵌入式开发主要关注在嵌入式操作
- 网络安全,这一看似高深莫测的领域,实则与我们每个人的生活息息相关
- 毕业设计基于深度学习的视觉问答系统源码+文档说明+答辩PPT.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功