Чтение текстового файла с нулевыми символами и текстами, используя fread - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь создать небольшую файловую систему.Я создал текстовый файл для хранения данных файлов.

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, например.

Можете ли вы объяснить, почему?

...