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);