Объекты файлов в io
модуле (те, которые вы получаете open
) и везде, где вы ожидаете в stdlib, всегда, cat dump.txt
когда они flush
, или полагаются на API платформы, которые гарантируют это.
Даже сторонние библиотеки должны " с открытым ( „dump.txt“ , „ж“ ) , как е : в то время как правда : ЬиЙ = read_off_some_thingy () е . Писать ( БУФЫ . Декодировать ()) п . Заподлицо () время . sleep ( 5 ) и с потоком «по их методам, если они хотят, чтобы их объекты были файловыми объектами. 1 close
Основная причина вызова flush
- это когда вы еще не закрываете файл, но некоторые другие программы могут захотеть просмотреть содержимое.
Например, многие люди пишут такой код:
fsync
а затем они задаются вопросом, почему, когда они close
или открывают его в «Блокноте» или что-то в этом роде, оно пустое или отсутствует последние 3 строки или срезается посредине линии. Это проблема flush
:
flush
Или, наоборот, у них работает тот же код, но проблема в том, что кто-то может вытащить вилку на компьютер (или, что более вероятно, в наши дни, убить ваш контейнер), а затем после перезагрузки они будут иметь поврежденный файл, который разрезает в середине строки, и теперь скрипт perl, который сканирует вывод, не будет запущен, и никто не хочет отлаживать код perl. Разная проблема, одно и то же решение.
Но если вы знаете, что файл будет закрыт какой-то точкой (скажем, потому что есть with
инструкция, которая заканчивается до этого), и вам не нужно, чтобы файл был сделан до этого момента, вы не необходимо позвонить flush
.
Вы не упомянули flush
, что представляет собой еще одну проблему - и намного сложнее, чем у большинства людей, - поэтому я не буду в нее вникать. Но связанный с вами вопрос уже охватывает основы.
1. Всегда есть вероятность, что вы используете некоторую стороннюю библиотеку с файлоподобным объектом, утиные типы которых достаточно близки к файловому объекту для ваших нужд, но это не так. И такой тип может иметь то, close
что нет flush
. Но я, честно говоря, не думаю, что когда-либо видел объект, у которого был flush
метод, который не называл его близким.