https://github.com/carmjos/filesys
简易的文件系统。功能包括磁盘初始化、新建文件、删除文件、更新文件、查找文件、文件统计、磁盘统计、分配策略选择、磁盘整理。基于C语言实现。
https://github.com/carmjos/filesys
c console file filesystem simulation
Last synced: 12 months ago
JSON representation
简易的文件系统。功能包括磁盘初始化、新建文件、删除文件、更新文件、查找文件、文件统计、磁盘统计、分配策略选择、磁盘整理。基于C语言实现。
- Host: GitHub
- URL: https://github.com/carmjos/filesys
- Owner: CarmJos
- License: gpl-3.0
- Created: 2025-05-30T03:09:29.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-05-31T22:14:48.000Z (about 1 year ago)
- Last Synced: 2025-06-07T15:48:46.039Z (about 1 year ago)
- Topics: c, console, file, filesystem, simulation
- Language: C
- Homepage:
- Size: 319 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 简易文件系统模拟


编码实现简易的文件系统,功能包括磁盘初始化、新建文件、删除文件、更新文件、查找文件、文件统计、磁盘统计、分配策略选择。
> 本项目系 [《操作系统》]() 课程设计的实践项目,旨在帮助理解文件系统的基本原理和实现方式。
## 需求
1. 磁盘空间的模拟: 通过二维数组`fileData [x][x]`模拟磁盘空间。
2. 分配算法: 连续分配法,在fileData内为文件分配连续的空闲存储空间。
3. 文件系统功能
1. **磁盘初始化**:初始化相关数据结构,完成磁盘的初始化(若磁盘已存储信息,相当于格式化磁盘)
2. **新建文件**:输入文件名和文件内容,创建文件(文件不允许重名)
3. **删除文件**:输入文件名,删除文件(若没有找到,给出适当提示)
4. **更新文件**:输入文件名,找到该文件并显示内容,然后重新输入内容保存到该文件(若没有找到,给出适当提示)
5. **查找文件**:输入文件名,显示文件内容(若没有找到,给出适当提示)
6. **文件统计**:按文件大小,从大到小按行显示所有文件(文件名+文件大小+文件内容)
7. **磁盘统计**:打印磁盘存储情况(格式化打印数组fileData,空闲元素打印'-')
8. **分配策略**:最先适配、最佳适配、最坏适配(默认为最先适配)
## 操作
```shell
DISK SIMULATION console (types 'exit' to quit)
console >
```
在控制台中,提供基于指令的操作。
```shell
# 查看帮助信息
help
# 以给定的行数和列数初始化磁盘空间。
init
# 修改磁盘分配策略
mode
# 写入文件内容到磁盘
w [new_content...]
# 从磁盘中删除文件
rm
# 查看文件内容
cat
# 列出当前磁盘中的所有文件
ls
# 执行磁盘整理 (额外功能)
defragment
```
## 实现逻辑
### 指令系统(`commands.c/h`)
1. **命令注册机制**
- 使用 `Command` 结构体存储命令信息(名称、用法、描述和执行函数)
- 通过 `register_command` 函数注册新命令
- 支持最多 32 个命令(MAX_COMMANDS)
2. **命令解析器**
- `parse_args` 函数负责将输入字符串解析为参数数组
- 支持空格和制表符作为分隔符
- 每条命令最多支持 16 个参数(MAX_ARGS)
3. **控制台运行器**
- `console_run` 函数提供交互式命令行界面
- 支持命令历史记录和退出功能
- 内置帮助系统,显示所有可用命令
### 文件系统(`file_system.c/h`)
1. **存储结构**
- 使用二维字符数组模拟磁盘存储空间
- 支持动态大小的磁盘空间(通过 rows 和 cols 指定)
- 文件元数据存储在独立的数组中
2. **文件管理**
- `FileMeta` 结构体存储文件元信息(名称、位置、大小)
- 支持最多 32 个文件(MAX_FILE_COUNT)
- 文件名最大长度为 10 字符(MAX_FILE_NAME_LENGTH)
3. **空间分配策略**
- 实现三种分配策略:
- 最先适配(First Fit):选择第一个足够大的空闲空间
- 最佳适配(Best Fit):选择最小的足够大的空闲空间
- 最坏适配(Worst Fit):选择最大的空闲空间
- 使用连续分配方式,将二维空间视为一维连续空间处理
4. **文件操作**
- 文件创建:检查名称唯一性,分配空间,写入内容
- 文件删除:清除内容,更新元数据
- 文件读取:支持跨行读取,自动添加字符串结束符
- 文件更新:先删除后重新创建
5. **磁盘维护**
- 碎片整理:将文件重新排列,合并空闲空间
- 磁盘统计:显示存储使用情况
### 控制台界面(`file_console.c`)
1. **用户交互**
- 提供命令行界面进行文件系统操作
- 支持文件内容的输入和显示
- 提供友好的错误提示
2. **命令实现**
- `init`:初始化磁盘空间
- `mode`:切换分配策略
- `w`:写入文件内容
- `rm`:删除文件
- `cat`:查看文件内容
- `ls`:列出所有文件
- `defrag`:执行碎片整理
3. **状态管理**
- 维护全局磁盘状态
- 提供磁盘未初始化的检查
- 支持命令执行结果的反馈
## 开源协议
本项目代码基于 [GNU General Public License v3.0](https://opensource.org/licenses/GPL-3.0) 开源。
## Supports
万分感谢 Jetbrains 慷慨地提供了开源许可证,让我可以专心致力于开发此项目及其他开源项目之上。
[](https://www.jetbrains.com/?from=https://github.com/CarmJos/CWorks)