Что произойдет, если вы не закроете дескриптор файла в Perl?

Если я пишу Perl-скрипт, который перезаписывает STDERR дубликатом STDOUT, но никогда не восстанавливает дескриптор файла, что происходит в конце выполнения скрипта? Я не могу найти ничего, что предупреждало бы о том, что на самом деле происходит или не происходит.

Я, вероятно, дезинформирован, но спасибо за ваше терпение.


person 0x1F602    schedule 02.01.2013    source источник


Ответы (1)


Когда процесс завершается, ядро ​​восстанавливает все использованные ресурсы. Сюда входят все файловые дескрипторы, которые просто закрыты. Если есть буфер уровня приложения, данные в этом буфере могут быть не записаны в ядро, но в противном случае нет никакого риска держать файловые дескрипторы открытыми перед выходом.

Если ваш сценарий Perl завершается использованием exec для запуска другого процесса, этот процесс унаследует все файловые дескрипторы (кроме тех, которые помечены как близкие при выполнении).

person Sylvain Defresne    schedule 02.01.2013
comment
Кроме того, perl обычно позаботится об очистке своих буферов по мере необходимости, если только вы не сделаете что-нибудь глупое вроде kill 9, $$. Хотя кажется, что на некоторых платформах остаются небольшие с этим проблемы. - person Ilmari Karonen; 02.01.2013