Skip to content

TempFS - A simple file system with support for reading and writing files.

Notifications You must be signed in to change notification settings

pimnik98/TempFS

Repository files navigation

TempFS

TempFS - это файловая система, предназначенная для хранения временных и промежуточных данных. Она оптимизирована для быстрого создания, удаления и изменения файлов и папок, обеспечивая быструю и надежную работу с данными в вашей операционной системе.

Одной из ключевых особенностей TempFS является поддержка создания и модификации файлов с использованием отступов (offset). Это позволяет работать с файлами большого размера, разбивая их на несколько фрагментов и обрабатывая каждый фрагмент отдельно. Отступы обеспечивают более гибкую и эффективную работу с файлами, а также позволяют избежать проблем, связанных с ограничением размера файла в некоторых системах.

TempFS также поддерживает удаление файлов, что позволяет пользователям удалять ненужные или временные файлы без необходимости перезаписывать весь диск.

Однако, стоит учесть, что максимальный размер дискового пространства, поддерживаемого TempFS, ограничен 4 GB из-за аппаратных ограничений. Это связано с тем, что система использует 32-битные целочисленные значения для хранения информации о размере файла и свободном пространстве на диске. Несмотря на это ограничение, TempFS остается отличным выбором для вашей операционной системы.

Пример функций, которые позволяют управлять файловой системой

Внимание! Дальше приведено минимальное API, которое может выполнять только базовые операции с файловой системой TempFS. Для более тонкой настройки и сложных операций (к примеру форматирование раздела под данную файловую систему) рекомендуется просмотреть исходный код самой файловой системы - tempfs.c. Также следует знать, что в данном примере используется эмуляция дискового устройства (emu/disk.c) и подобие единого API файловой системы от SayoriOS - (emu/fsm.h). В папке “ext” можно найти дополнительные файлы, которые могут быть полезны для более глубокого понимания работы с TempFS.

Получить все элементы в папке

  FSM_DIR* Dir = fs_tempfs_dir(Disk, Path);
Параметр Тип Описание
Disk const char Обезательно. Буква или индекс диска
Path const char* Обезательно. Путь к папке или файлу

Пример получения списка файлов и папок в папке /

void printFiles(){

    printf("\n[>] Getting data from the %s folder \n",FOLDER);
    FSM_DIR* Dir = fs_tempfs_dir('T', FOLDER);
    if (Dir == NULL || Dir->Ready == 0){
        printf(" |--- [ERR] Failed to get folder information\n");
        free(Dir);
        return;
    }
    size_t Sizes = 0;
    for (int i = 0; i < Dir->Count; i++){
        printf("%s\t%s\t\t%s\n",
            " |--- 0000-00-00 00:00",
            (Dir->Files[i].Type == 5?"<DIR> ":"<FILE>"),
            Dir->Files[i].Name
        );
        Sizes += Dir->Files[i].Size;
    }
    printf(" |\n |--- Files: %d | Folders: %d | All: %d\n", Dir->CountFiles, Dir->CountDir, Dir->Count);
    printf(" |--- Folder size: %d mb. | %d kb. | %d b.\n", (Sizes != 0?(Sizes/1024/1024):0), (Sizes != 0?(Sizes/1024):0), Sizes);

    free(Dir);
}

Получить информацию о файле или папке

  FSM_FILE file = fs_tempfs_info(Disk, Path);
Параметр Тип Описание
Disk const char Обезательно. Буква или индекс диска
Path const char* Обезательно. Путь к папке или файлу

Проверяйте значение структуры Ready, если значение будет 0, значит файла не существует.

Прочитать файл

char* Path = "/folder/test.txt";
FSM_FILE file = fs_tempfs_info('T', Path);
tfs_log(" [>] File  : %s\n",Path);
tfs_log("  |--- Ready  : %d\n",file.Ready);
tfs_log("  |--- Name   : %s\n",file.Name);
tfs_log("  |--- Path   : %s\n",file.Path);
tfs_log("  |--- Mode   : %d\n",file.Mode);
tfs_log("  |--- Size   : %d\n",file.Size);
tfs_log("  |--- Type   : %d\n",file.Type);
tfs_log("  |--- Date   : %d\n",file.LastTime.year);

if (file.Ready != 1) return;

char* Buffer = malloc(file.Size);
memset(Buffer, 0, file.Size);
/// Disk, Path, Offset, Size, Buffer
size_t read = fs_tempfs_read('T', Path, 500, 50, Buffer);
tfs_log("READ: %d (%d) bytes...\n=====\n%s\n=====\n", read, file.Size, Buffer);

Проверить сигнатуру (подпись) файловой системы

  int detect = fs_tempfs_detect(Disk);
Параметр Тип Описание
Disk const char Обезательно. Буква или индекс диска

Возвращает 1, если проверка прошла успешно.

Проверить сигнатуру (подпись) файловой системы

  int isDelete = fs_tempfs_delete(Disk,Path,Mode);
Параметр Тип Описание
Disk const char Обезательно. Буква или индекс диска
Path const char* Обезательно. Путь к папке или файлу
Mode int Обезательно. Что удаляем (0 - файл | 1 - папку)

Возвращает 1, если элемент успешно удален.

Запись данные в файл

  int countWrite = fs_tempfs_write(Disk, Path, Offset, Count, Buffer);
Параметр Тип Описание
Disk const char Обезательно. Буква или индекс диска
Path const char* Обезательно. Путь к папке или файлу
Offset size_t Обезательно. Отступ
Count size_t Обезательно. Кол-во данных которое пишем
Buffer void* Обезательно. Буфер

Возвращает кол-во записанных байтов.

Создать файл или папку

  int create = fs_tempfs_create(Disk,Path,Mode);
Параметр Тип Описание
Disk const char Обезательно. Буква или индекс диска
Path const char* Обезательно. Путь к папке или файлу
Mode int Обезательно. Что создаем (0 - файл | 1 - папку)

Возвращает 1, если элемент создан.

Получение метки раздела / диска

char* label = malloc(32);
memset(label, 0 , 32);
fs_tempfs_label('T',label);

printf(" |--- Label: %s\n",label);

About

TempFS - A simple file system with support for reading and writing files.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages