Skip to content
This repository was archived by the owner on Aug 4, 2025. It is now read-only.

carm-education/filesys

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简易文件系统模拟

Project logo

CodeSize

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

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

需求

  1. 磁盘空间的模拟: 通过二维数组fileData [x][x]模拟磁盘空间。
  2. 分配算法: 连续分配法,在fileData内为文件分配连续的空闲存储空间。
  3. 文件系统功能
    1. 磁盘初始化:初始化相关数据结构,完成磁盘的初始化(若磁盘已存储信息,相当于格式化磁盘)
    2. 新建文件:输入文件名和文件内容,创建文件(文件不允许重名)
    3. 删除文件:输入文件名,删除文件(若没有找到,给出适当提示)
    4. 更新文件:输入文件名,找到该文件并显示内容,然后重新输入内容保存到该文件(若没有找到,给出适当提示)
    5. 查找文件:输入文件名,显示文件内容(若没有找到,给出适当提示)
    6. 文件统计:按文件大小,从大到小按行显示所有文件(文件名+文件大小+文件内容)
    7. 磁盘统计:打印磁盘存储情况(格式化打印数组fileData,空闲元素打印'-')
    8. 分配策略:最先适配、最佳适配、最坏适配(默认为最先适配)

操作

DISK SIMULATION console (types 'exit' to quit)

console >

在控制台中,提供基于指令的操作。

# 查看帮助信息
help

# 以给定的行数和列数初始化磁盘空间。
init <rows> <cols>

#  修改磁盘分配策略
mode <strategy, 0=first, 1=best, 2=worst>

# 写入文件内容到磁盘
w <file> [new_content...]

# 从磁盘中删除文件
rm <file>

# 查看文件内容
cat <file>

# 列出当前磁盘中的所有文件
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 开源。

Supports

万分感谢 Jetbrains 慷慨地提供了开源许可证,让我可以专心致力于开发此项目及其他开源项目之上。

About

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

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Contributors