An open API service indexing awesome lists of open source software.

https://github.com/carmjos/filesys

简易的文件系统。功能包括磁盘初始化、新建文件、删除文件、更新文件、查找文件、文件统计、磁盘统计、分配策略选择、磁盘整理。基于C语言实现。
https://github.com/carmjos/filesys

c console file filesystem simulation

Last synced: 12 months ago
JSON representation

简易的文件系统。功能包括磁盘初始化、新建文件、删除文件、更新文件、查找文件、文件统计、磁盘统计、分配策略选择、磁盘整理。基于C语言实现。

Awesome Lists containing this project

README

          

# 简易文件系统模拟

Project logo

![CodeSize](https://img.shields.io/github/languages/code-size/CarmJos/filesys)

编码实现简易的文件系统,功能包括磁盘初始化、新建文件、删除文件、更新文件、查找文件、文件统计、磁盘统计、分配策略选择。

> 本项目系 [《操作系统》]() 课程设计的实践项目,旨在帮助理解文件系统的基本原理和实现方式。

## 需求

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://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)](https://www.jetbrains.com/?from=https://github.com/CarmJos/CWorks)