fread все равно вернется, если вы попытаетесь прочитать больше байтов, чем есть.
Я нашел один из самых быстрых способов чтения файлов:
/ * искать конец файла * /
FSEEK (файл, 0, SEEK_END);
/ * получить размер файла * /
размер = ftell (файл);
/ * искать начало файла * /
FSEEK (файл, 0, SEEK_SET);
/ * сделать буфер для файла * /
буфер = malloc (1048576);
/ * зачитывать по 1 МБ за раз, пока вы не достигнете размера байтов и т. Д.
На современных компьютерах включите свой ОЗУ и загрузите все это в ОЗУ, тогда вы легко сможете пробираться через память.
По крайней мере вы должны использовать fread с размерами блоков настолько большими, насколько это возможно, и, по крайней мере, такими же большими, как блоки кеша или размер сектора жесткого диска (минимум 4096 байт, я бы лично использовал минимум 1048576). Вы обнаружите, что с гораздо большими требованиями к чтению rfead может последовательно получать большой поток за одну операцию. Предлагаемое здесь некоторыми людьми использование 128 байтов нелепо ... так как в конечном итоге накопителю придется постоянно искать, так как крошечная задержка между вызовами приведет к тому, что голова уже пройдет следующий сектор, который почти наверняка имеет последовательные данные, которые вы хотите.