Проверка возвращаемого значения fputc
обычно не скажет вам ничего полезного и сделает ваш код отвратительным.Причина, по которой возвращаемое значение редко имеет смысл, заключается в том, что файлы stdio буферизированы и произошла ошибка записи (обычно из-за исчерпания дискового пространства, но также из-за аппаратного сбоя, который на самом деле не может быть обработан изящно)) не будет сообщено, пока буфер не будет очищен.Из-за этого также невозможно узнать, даже когда сообщается об ошибке, сколько было успешно зафиксировано на диске.
Таким образом, я считаю, что вы должны использовать stdio только для записи файлов, когда выготов считать всю операцию «сохранения» неудачной, если во время записи возникает какая-либо ошибка.Если вы воспользуетесь этим подходом, вы можете полностью игнорировать возвращаемое значение всех функций записи.Это связано с тем, что stdio FILE
сохраняет индикатор внутренней ошибки доступным как ferror(f)
.Так что просто делайте все ваши записи, не проверяя на наличие ошибок, затем, прежде чем закрыть файл, проверьте ferror(f)
.Если он возвращает ненулевое значение, вы знаете, что операция «сохранить» не удалась, и вы можете сообщить об этом пользователю и remove
частично записанному файлу.Имейте в виду, что вы должны сначала записывать во временный файл, а затем rename
это на место, а не писать прямо поверх старого файла, если только вы не рискуете уничтожить старые данные пользователя при сбое.