Какие последствия не закрытие дескриптора каталога в Perl?

Недавно я унаследовал код, написанный кем-то другим.

Я обнаружил, что везде в коде, который каталог был открыт для чтения, и несколько экземпляров этой программы работают одновременно. В случае этого каталога в приведенном выше примере $ dir - это одно и то же значение для всех экземпляров. Если 10 экземпляров этой программы выполнялись одновременно, все они удерживали дескриптор открытого каталога одного и того же каталога в течение 5 минут или дольше. Я уверен, что Perl автоматически закрывает дескриптор каталога, когда программа завершает свою работу, но в лучших практиках рекомендуется закрыть его как можно скорее.

Для меня более очевидно, что оставление дескрипторов файлов открытыми может вызвать проблемы (особенно для дескрипторов файлов. которые открыты для записи), но какие плохие вещи могут произойти, если не закрыть дескриптор каталога?

Я спрашиваю, потому что была странная ситуация, когда эта программа пыталась создать файл (в определенном каталоге автор: $ dir выше). В имя файла был встроен PID, поэтому вероятность того, что файл уже существует, мала, но Perl не смог открыть файл для записи, потому что он сказал, что он уже существует. Когда мы заглянули в каталог, этого файла не было. Мне интересно, могут ли все дескрипторы открытых каталогов в этом каталоге вызвать такую ​​проблему?

Я не уверен, что ОС имеет значение, но эта программа работает на AIX.

Заранее спасибо, и с пятницей!

6
задан BrianH 10 September 2010 в 18:18
поделиться