Может ли сбой fopen повлиять на файловую систему? - PullRequest
5 голосов
/ 30 марта 2011

Если fopen (путь, "w") завершится успешно, файл будет обрезан. Если fopen не работает, есть ли гарантии, что файл не был изменен?

Ответы [ 3 ]

6 голосов
/ 30 марта 2011

Нет, нет никаких гарантий относительно состояния файла в случае сбоя fopen(path, "w"). Сбой может быть вызван любой операцией, связанной с открытием файла, передачей усечения на диск и т. Д. ... Единственная гарантия, которую дает сбой, заключается в том, что у вас нет доступа к файлу.

0 голосов
/ 30 марта 2011

Отличный вопрос, и я думаю, что ответ - нет.fopen должен выделить структуру FILE, и естественным порядком операций при его реализации будет сначала открыть файл, а затем попытаться выделить FILE.Таким образом, fopen - это просто оболочка вокруг fdopen (или аналогичная функция с некоторыми ведущими подчеркиваниями или еще чем-то для соответствия пространства имен).

Лично я бы вообще не использовал функции stdio, когда вы заботитесьо состоянии ваших файлов после любого сбоя.Даже если у вас открыт файл, буферизация stdio делает почти невозможным узнать , где произошла ошибка, если функция записи когда-либо возвращает ошибку, и еще более невозможно вернуть ваш файл в пригодное для использования согласованное состояние.

0 голосов
/ 30 марта 2011

Единственная причина, по которой fopen () потерпит неудачу, заключается в том, что файл недоступен или не может быть изменен. Если вас беспокоит изменение файла, вы можете вместо этого использовать команду open () с флагом O_WRITE. Затем вы можете преобразовать это в указатель FILE *, используя fdopen ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...