#c #file #fclose
#c #файл #закрыть #fclose
Вопрос:
Как мне закрыть файл и удалить его?
У меня есть следующий код:
FILE *filePtr = fopen("fileName", "w");
...
Теперь я хочу закрыть filePtr и удалить файл «fileName».
Должен ли я:
fclose(filePtr);
remove("fileName");
Или:
remove("fileName");
fclose(filePtr);
Имеет ли значение, что я делаю первым?
Спасибо!!
Ответ №1:
Это зависит от операционной системы. В * nix удаление открытого файла оставляет его открытым и данные на диске, но удаляет имя файла из файловой системы и фактически удаляет файл при закрытии; некоторые другие операционные системы могут вообще не разрешить вам удалять открытый файл. Поэтому первое рекомендуется для максимальной переносимости.
Комментарии:
1. значит, я должен сначала закрыть, а затем удалить (если я нацелен на * nix)? Спасибо!
2. Как говорится в ответе, * nix не заботится о порядке операций. Вам следует беспокоиться о других операционных системах.
3. На самом деле, файл будет удален с диска только тогда, когда количество ссылок на файл достигнет 0.
unlink
количество ссылок только уменьшится.
Ответ №2:
Имеет больше смысла fclose
, а затем разорвать связь.
Ответ №3:
Как написано в man unlink (2) (для систем Unix) :
Функция unlink() удаляет ссылку с именем path из ее каталога и уменьшает количество ссылок в файле, на который ссылается ссылка. Если это уменьшение уменьшает количество ссылок в файле до нуля, и ни один процесс не открыл файл, то все ресурсы, связанные с файлом, освобождаются. Если файл открыт в одном или нескольких процессах при удалении последней ссылки, ссылка удаляется, но удаление файла откладывается до тех пор, пока все ссылки на него не будут закрыты.
Таким образом, порядок не имеет никакого значения.
Ответ №4:
Вам не нужен fopen
файл для remove
этого. Но в Linux, если вы remove
создаете fopen
отредактированный файл, он будет удален только после его закрытия. Вы все еще можете читать / записывать в него.