Единственное, что я хотел бы оставить в связи с тем, чтобы автоматические очистки не закрывали файловые дескрипторы, было то, насколько вы заботитесь о любых данных, которые вы записали в указанные файловые дескрипторы, и разумно ли вы справляетесь с ошибкой. написать.
write () не нужно блокировать (в зависимости от того, как он был открыт () в первую очередь) и ждать успешной фиксации данных, поэтому существуют случаи, когда закрытие может завершиться неудачей, потому что основная подсистема не может зафиксировать в ожидании записи и, таким образом, закрывает выходы с ошибкой и устанавливает errno в EIO, и в зависимости от того, что вы только что написали, вы можете или не можете предпринять какие-либо корректирующие действия.
По общему признанию, это угловой случай, когда вы ДЕЙСТВИТЕЛЬНО заботитесь о согласованности данных, то есть о приложениях типа СУБД или сообщении об успехе / неудаче резервного копирования. Во многих (большинстве?) Случаях это на самом деле не имеет большого значения, и вы будете в порядке, если не будете использовать close () для очистки / выхода.