# 一、文件系统的框架搭建
创建一个大约100M的文件作为模拟的硬盘,硬盘总空间分三个部分
- 超级块区: 1 * SuperBlk,
- inode区: 1024 * inode
- 磁盘块区 : 80 * 1024 * 磁盘块(1K)
超级块反映整个文件系统的空间分配情况,保存inode区的位图和磁盘块区的位图。每个inode块对应一个目录文件或者普通文件,是文件的索引节点。磁盘块是真正存储内容的地方,磁盘块并不需要特殊的数据结构进行标记,只要能找到对应的位置,然后在要进行读写的时候将其读入内存,进行操作后再放回硬盘即可。
对于目录文件,它对应的磁盘块中保存着一项项的目录信息,对于普通文件(如文本文件),它对应的磁盘块中存储的是文本内容。
# 二、文件系统界面及使用介绍
界面模仿linux标准shell——bash,通过输入指令完成对于文件系统的操作,指令类似linux下的指令结构,具体使用格式在帮助手册中有写,可以输入man指令查看帮助手册。
不同的文件类型显示的颜色不同:
- 蓝色 —— 目录
- 白色 —— 普通文件
- 绿色 —— 可执行文件(可以启动一个进程)
- 红色 —— 压缩文件
# 三、文件路径名的解析
所有操作涉及的路径,若以‘/’打头则认为是绝对路径从根目录开始,否则认为是相对路径从当前目录开始,完成对路径名的解析,对于错误的指令会有相应的提示信息。
# 四、实现文件操作指令(共17条)
## 4.1 格式化文件系统: mkfs
说明:格式化文件系统,只保留根目录,以及根目录下的两个目录项“.”和“..”,均指向根目录
![](https://www.writebug.com/myres/static/uploads/2022/2/19/359258114dfdee38eba2df55af1ce9c2.writebug)
## 4.2 创建目录: mkdir 目录名路径
说明:创建一个空的目录项,该目录下自动创建两个子目录:“.”指向本目录,“..”指向父目录
![](https://www.writebug.com/myres/static/uploads/2022/2/19/37c49368b440f01ac1fac3d3ee242d1d.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/2/19/f1991e3ed188012c3752610645f887be.writebug)
## 4.3 删除目录: rmdir 目录名路径
说明:删除目录,通过深度优先遍历,删除该目录下的所有文件,再删除该目录项
![](https://www.writebug.com/myres/static/uploads/2022/2/19/5955e76a603d9e75cc457a3b4912c1a1.writebug)
## 4.4 改变目录: cd 目录名路径
说明:改变目录路径
![](https://www.writebug.com/myres/static/uploads/2022/2/19/ae436cdcba92aaee5422f22798b63340.writebug)
## 4.5 显示目录项: ls
说明:显示当前目录下的全部文件,其中:
- 蓝色 —— 目录
- 白色 —— 普通文件
- 绿色 —— 可执行文件(可以启动一个进程)
- 红色 —— 压缩文件
![](https://www.writebug.com/myres/static/uploads/2022/2/19/dca358ea2a9f4cdc50c3443c45af5573.writebug)
## 4.6 创建文件: touch 文件名路径
说明:创建一个空的文件
![](https://www.writebug.com/myres/static/uploads/2022/2/19/6b1ca680ae0d724efa7b90545871bd29.writebug)
## 4.7 删除文件: rm 文件名路径
说明:删除一个指定文件
![](https://www.writebug.com/myres/static/uploads/2022/2/19/1366f74eb0e5a1ae6b154c4bce2e1d61.writebug)
## 4.8 编辑文件: vi 文件名路径
说明:调用了windows自带的记事本应用,打开一个已有的文件,在记事本中编辑文件,关闭并完成保存
![](https://www.writebug.com/myres/static/uploads/2022/2/19/e5104d37e8f6e5d1c90144047c512b6e.writebug)
## 4.9 拷贝文件: cp 文件名路径 文件名路径/目录名路径
说明:
- 将一个文件复制到另一个文件,若另一个文件已经存在,则将数据拷贝进去;若另一个文件不存在,创建一个新文件并将原文件数据拷贝进去
- 将一个文件复制到一个目录下,若该目录下已有一个同名文件,则进行覆盖;若该目录下没有同名文件,则创建一个同名文件并将数据拷贝进去
![](https://www.writebug.com/myres/static/uploads/2022/2/19/be305583ce66f6353a615460923eefe5.writebug)
将根目录下的a.txt拷贝到home目录下
## 4.10 移动文件: mv 文件名路径 文件名路径/目录名路径
说明:
- 将一个文件移动到另一个文件,若另一个文件已经存在,则将数据拷贝进去,并删除原文件;若另一个文件不存在,创建一个新文件并将原文件数据拷贝进去,再删除原文件
- 将一个文件复制到一个目录下,若该目录下已有一个同名文件,则进行覆盖,并删除原文件;若该目录下没有同名文件,则创建一个同名文件并将数据拷贝进去,并删除原文件
- 若原文件与目标文件在同一目录下,且目标文件不存在,相当于对原文件进行重命名
![](https://www.writebug.com/myres/static/uploads/2022/2/19/75c6c506fa6098a422d9d212b2eee3df.writebug)
将根目录的a.txt移动到music目录下
## 4.11 查看文件属性:stat 文件名路径
说明:查看某个文件的属性,包括文件名,文件大小,占用磁盘块数,文件类型,对应inode节点,读写执行权限,访问时间,修改时间,改变时间。
在这里对于访问时间,修改时间,改变时间做一下解释:
- 访问时间:当有操作读取了文件的内容,则更新访问时间
- 修改时间:当有操作修改了文件的内容,则更新修改时间
- 改变时间:当文件的属性,如文件大小,文件权限等被修改时,更新改变时间
- 注:当文件被编辑后,一般文件的内容和大小都发生改变,所以修改时间和改变时间都要更新
![](https://www.writebug.com/myres/static/uploads/2022/2/19/dbabbd04e014cfb85afec7c3e5055ad6.writebug)
## 4.12 改变文件权限:
```shell
chmod +r/-r 文件名路径
chmod +w/-w 文件名路径
chmod +x/-x 文件名路径
```
说明:改变文件权限,文件的权限包括三个: r表示读权限,w表示写权限,x表示执行权限,刚创建的目录一般可读可写可执行,刚创建的文件一般可读可写不可执行。
```shell
+r/+w/+x 表示增加读权限/写权限/执行权限,
-r/-w/-x 表示删除读权限/写权限/执行权限
```
#### 对于文件权限作如下说明:
读权限
若无读权限,那么文件不许读,编辑,拷贝,复制指令中若要读文件,则会失败
![](https://www.writebug.com/myres/static/uploads/2022/2/19/663311b61faddfd5d1a1b3c2236b2130.writebug)
拷贝时若拷贝到本目录下的一个不存在的文件,则相当于对原文件重命名,故没有读取原文件,这时原文件没有读权限也是可以成功的
![](https://www.writebug.com/myres/static/uploads/2022/2/19/ce5c218a8b149da162f56eb474a03b89.writebug)
写权限
若无写权限,文件仍然可以用vi打开,还可以编辑,但是无法保存,会提示没有写权限
![](https://www.writebug.com/myres/static/uploads/2022/2/19/a8bfbf4f2dec5b3a3707dabd57ca469c.writebug)
写权限,是指文件的内容不可写,但文件的属性是可以修改的
![](https://www.writebug.com/myres/static/uploads/2022/2/19/18c2b07d7360c81df9b4a27859925324.writebug)
执行权限
有执行权限,意味着该文件中保存的信息是指令,是可以被进程管理创建新进程,然后一条一条执行的
一般的保存文件信息的文件是没有执行权限的
#### 对于目录权限作如下说明:
读权限
若无读权限,那么“目录表”文件不许读,ls会失败
![](https://www.writebug.com/myres/static/uploads/2022/2/19/70107aa90a56b83571d4f3b07eb52511.writebug)
写权限
若无写权限,那么“目录表”文件不许写
创建文件,删除文件,文件改名会修改目录文件
修改文件不需要修改�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
创建一个大约100M的文件作为模拟的硬盘,硬盘总空间分三个部分 超级块区: 1 * SuperBlk, inode区: 1024 * inode 磁盘块区 : 80 * 1024 * 磁盘块(1K) 超级块反映整个文件系统的空间分配情况,保存inode区的位图和磁盘块区的位图。每个inode块对应一个目录文件或者普通文件,是文件的索引节点。磁盘块是真正存储内容的地方,磁盘块并不需要特殊的数据结构进行标记,只要能找到对应的位置,然后在要进行读写的时候将其读入内存,进行操作后再放回硬盘即可。 对于目录文件,它对应的磁盘块中保存着一项项的目录信息,对于普通文件(如文本文件),它对应的磁盘块中存储的是文本内容。
资源推荐
资源详情
资源评论
收起资源包目录
100012421-基于C++实现模拟文件系统.zip (54个子文件)
filesystem
LICENSE 1KB
.vs
filesys
v14
.suo 108KB
filesys.sdf 38.31MB
ipch
FILESYS-aa8a593a
FILESYS-578417eb.ipch 3.38MB
说明.docx 621KB
filesys
block.h 211B
Compress.txt 1KB
buff.txt 1KB
const.h 951B
filesys.vcxproj.filters 2KB
man.txt 1KB
file.cpp 20KB
decode.txt 9KB
dir.h 683B
zip.h 965B
main.cpp 3KB
dir.cpp 11KB
file.h 548B
inode.cpp 2KB
filesys.vcxproj 8KB
inode.h 590B
superblk.h 253B
Disk.txt 5.44MB
path.h 380B
fs.h 154B
block.cpp 1009B
DeCompress.txt 3KB
fs.cpp 2KB
Debug
file.obj 71KB
inode.obj 12KB
dir.obj 50KB
path.obj 11KB
filesys.tlog
CL.write.1.tlog 4KB
filesys.lastbuildstate 161B
CL.command.1.tlog 5KB
link.command.1.tlog 2KB
link.read.1.tlog 4KB
link.write.1.tlog 1KB
CL.read.1.tlog 78KB
zip.obj 50KB
filesys.log 407B
vc140.idb 755KB
block.obj 11KB
vc140.pdb 172KB
main.obj 38KB
fs.obj 13KB
zip.cpp 14KB
code.txt 9KB
path.cpp 2KB
Debug
filesys.pdb 868KB
filesys.ilk 430KB
filesys.exe 84KB
README.md 12KB
filesys.sln 1KB
共 54 条
- 1
资源评论
- weixin_623177432023-08-29资源很实用,对我启发很大,有很好的参考价值,内容详细。
- m0_748355872023-11-16资源和描述一致,质量不错,解决了我的问题,感谢资源主。
神仙别闹
- 粉丝: 2674
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功