Идея состоит в том, чтобы каждый раз проверять возвращаемое значение fread, если возвращаемое значение меньше ожидаемого, а затем проверить feof (), чтобы увидеть, достигнут ли конец файла.Вы можете проверить страницу руководства, используя Google "Man Fread" и "Man Feof".Вы можете использовать цикл do while для циклического перемещения по файлу.
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
int feof(FILE *stream);
что-то вроде:
while(1) {
size_read = fread(&file.type, sizeof(file.type), 1, f);
if(size_read!=1 || feof(f))
break;
fread(&file.length, sizeof(file.length), 1, f);
//do the same check
file.data = malloc(file.length * sizeof(*file.data));
fread(file.data, sizeof(*file.data), file.length, f);
//do the same check, remember to free the memory!
}