Skip to content

BlogPlayCode/BASFS

Repository files navigation

BASFS File System

DOCUMENTATION

Made by Blagov, Arkhipov, Suslikov

TODO: Docs

⚙️ Быстрый старт

# компиляция (Linux/macOS, требуется gcc)
$ gcc -std=c11 -Wall -Wextra -o basfs main.c filesystem.c

# запуск
$ ./basfs
BASFS loaded. Enter HELP for help.

Enter command
> 

▶️ Если файл-диск disk.filesystem отсутствует, создаётся пустая ФС. При завершении работы через команду EXIT все изменения автоматически сохраняются в этот файл.



📂 Структура репозитория

Файл/папка Назначение
main.c CLI-утилита: парсинг команд, взаимодействие с API файловой системы
filesystem.c Реализация in-memory ФС и загрузка/выгрузка в disk.filesystem
filesystem.h Публичный API (fs_load, fs_select, …)
disk.filesystem Сам «диск»; текстовый контейнер с данными
README.md Вы читаете его сейчас
presentation.pptx Презентация (архитектура, демо, перспективы)
logo.png Логотип проекта

  • Строка, начинающаяся с символа /, — имя файла (полный путь).
  • Все последующие строки вплоть до следующего / (или конца файла) относятся к содержимому текущего файла и записываются как есть.
  • Обязательного завершающего \n у содержимого быть не должно — при сохранении библиотека добавит его сама, чтобы сохранить корректность парсинга.

Формат максимально прост: это плюсы для читабельности и отладки, но минус – нет поддержки символа \n/ внутри контента, подкаталоги хранятся как часть текста пути, отсутствует индексация.



📝 Формат файла-диска

/absolute/path/to/file1.txt
Первая строка содержимого файла 1
Вторая строка содержимого файла 1
/another/file
весь следующий текст относится к файлу /another/file
/third
...
  • Строка, начинающаяся с символа /, — имя файла (полный путь).
  • Все последующие строки вплоть до следующего / (или конца файла) относятся к содержимому текущего файла и записываются как есть.
  • Обязательного завершающего \n у содержимого быть не должно — при сохранении библиотека добавит его сама, чтобы сохранить корректность парсинга.

Формат максимально прост: это плюсы для читабельности и отладки, но минус – нет поддержки символа \n/ внутри контента, подкаталоги хранятся как часть текста пути, отсутствует индексация.



💻 Доступные команды CLI

Команда Описание
HELP Вывести список доступных команд
OPEN <path> Показать содержимое файла
ADD <path> Создать новый пустой файл
UPDATE <path> Перезаписать содержимое файла (многострочный ввод с завершением .)
REMOVE <path> Удалить файл
LIST Показать список всех файлов
SAVE Сохранить изменения на диск
EXIT Выйти с сохранением изменений



Пример сеанса

user@user-V:~/Desktop/BASFS-dev$ ./basfs
BASFS loaded. Enter HELP for help.

Enter command
> help
Commands:
  HELP
  LIST
  OPEN <path>
  ADD <path>
  UPDATE <path>
       (last line must be '.')
  REMOVE <path>
  SAVE
  EXIT

Enter command
> list
File list (1):
  - /abc

Enter command
> open /abc
abc

Enter command
> add /test       
OK

Enter command
> update /test
Enter new content (last line must be '.'):
1234
5678
.
Updated

Enter command
> list
File list (2):
  - /abc
  - /test

Enter command
> remove /abc       
Deleted

Enter command
> open /test
1234
5678

Enter command
> save
Saved

Enter command
> exit

Bye!

  • In-memory хранение: при загрузке весь диск читается в RAM → высокая скорость операций, однако размер ограничен доступной памятью.
  • Линейный поиск по массиву FileEntry — O(n). Для крупных архивов можно заменить на хеш-таблицу или сбалансированное дерево.
  • fs_load() и fs_save() строго следуют описанному формату; заголовков, метаданных или индексов нет.
  • Подкаталоги — это просто часть строки пути (/dir/sub/file). Физической иерархии нет, но команды работают с абсолютным путём, так что проблем не возникает.
  • Код придерживается C11, warning-clean при -Wall -Wextra.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages