Нет, нет смысла делать такой повторный цикл, если fread
или fwrite
возвращает меньше ожидаемого числа прочитанных или записанных записей. Другими словами, stdio не похож на низкоуровневые операции read
и write
, которые могут привести к «коротким» операциям чтения или записи.
Если fread
возвращает меньше запрашиваемого количества записей, вы либо нажали EOF, либо произошла серьезная ошибка чтения. Вы можете различить их, проверив feof()
и ferror()
.
Аналогичным образом, если fwrite
возвращает меньше, чем запрошенное количество записей, вы либо исчерпали место на диске, либо столкнулись с серьезной ошибкой записи.
В любом случае из-за буферизации stdio практически невозможно узнать, сколько было успешно записано, поэтому, если вы столкнулись с ошибкой записи, вам обычно нужно считать файл потерянным и прервать всю операцию.