Что этот вопрос не о
Этот вопрос касается не автоматического закрытия файла с закрытием файла # или синтаксисом открытого файла File #. Это вопрос о том, где Ruby хранит список открытых файловых дескрипторов во время выполнения.
Актуальный вопрос
Если у вас есть программа с открытыми дескрипторами, но у вас нет доступа к связанному объекту File или IO, как вы можете найти ссылку на открытые файловые дескрипторы? Возьмите этот пример:
filename='/tmp/foo'
%x( touch "#{filename}" )
File.open(filename)
filehandle = File.open(filename)
Первый экземпляр файла открывается, но ссылка на объект не сохраняется в переменной. Второй экземпляр хранится в filehandle, где я могу легко получить доступ к нему С#inspect или #close.
Однако отброшенный объект File не исчез; он просто недоступен каким-либо очевидным образом. Пока объект не будет завершен, Ruby должен отслеживать его где-то... но где?