Я пытаюсь создать небольшую файловую систему.Я создал текстовый файл для хранения данных файлов.
int kufs_create_disk(char* disk_name, int disk_size){
FILE* file_ptr = fopen(disk_name, "w");
if (file_ptr == NULL)
return -1;
fseek (file_ptr, disk_size * 1024-1, SEEK_SET);
fwrite("", 1, sizeof(char), file_ptr); // to make a size for the file
fclose(file_ptr);
DiskName=disk_name;
return 0;
}
После записи в файл я получаю файл с размером, определяемым при вызове функции.
kufs_create_disk("test.txt", 5);
который создает файл размером 5 КБ с '\0'
, чтобы заполнить этот файл до размера.Я создал другую функцию для записи в этот файл в разных местах файла, которая прекрасно работает, и я не буду вставлять код для простоты.Когда я пытаюсь прочитать файл, используя fread()
, я не получаю все данные, которые я записал в память;скорее, я получаю только некоторые данные.
Моя реализация чтения будет выглядеть так:
int kufs_read(int fd, void* buf, int n){
FILE *file_ptr= fopen("test.txt","a+");
fseek (file_ptr, FAT[fd].position, SEEK_SET); //where FAT[fd].position is where I want to start my read and fd is for indexing purposes
fread(buf, 1, n, file_ptr); //n is the number of bytes to be read
FAT[fd].position = FAT[fd].position + n;
}
Дело в том, что файл читает некоторые из написанных символов и не читает остальные.Я провел небольшой тест, обойдя все файлы и проверив, читается ли каждая вещь, и fread
читает каждую вещь, но в буфере я получаю только некоторые из написанных мной символов.
Текстфайл выглядит примерно так:
0\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00written string1written string2 0\00\00\00\00\00\00\00\00\00\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00writtenstring 3 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00
Я получаю в строку записи строки строки и строки 2, например, я не записал строки 3, например.
Можете ли вы объяснить, почему?