fread()
, как следует из названия, считывает данные из файла. Логически, он не может вернуться до тех пор, пока он фактически не прочитает данные (не сохранит их в указанном вами буфере) или не сообщит об ошибке. Как только fread()
вернется, вы можете использовать данные.
fwrite()
, с другой стороны, может проходить через несколько уровней буферизации, в библиотеке времени выполнения C, в ОС и в других местах. fwrite()
возвращается, когда обрабатывается ваши данные и записывается ... где-то. Нет никакой гарантии, что он фактически записан в физический файл, пока вы не сбросите его (fflush(outfile);
) или не закроете его (fclose(outfile);
). Как только fwrite()
вернется, вы можете делать то, что вам нравится, с данными, которые вы ему передали (они были скопированы), но это все, что вы можете предположить.
Если ваша программа завершается нормально, она неявно закрывает (и, следовательно, очищает) все открытые выходные файлы. Если ваша программа прерывается ненормально, это может не произойти.
(На самом деле, я думаю, что есть некоторые случаи, когда данные не могут физически прибыть в файле, даже после того, как fclose()
или fflush()
.)