Где Ruby отслеживает дескрипторы открытых файлов?

Что это за вопрос НеО

Этот вопрос нео том, как автоматически закрывать файл с синтаксисом блока File#close или File#open. Это вопрос о том, где Ruby хранит свой список дескрипторов открытых файлов во время выполнения.

Фактический вопрос

Если у вас есть программа с открытыми дескрипторами, но у вас нет доступа к соответствующему объекту File или IO, как вы можете найти ссылку на открытые в данный момент файловые дескрипторы? Возьмем такой пример:

filename='/tmp/foo'
%x( touch "#{filename}" )
File.open(filename)
filehandle = File.open(filename)

Первый экземпляр File открыт, но ссылка на объект не сохраняется в переменной. Второй экземпляр хранится в filehandle, где я могу легко получить к нему доступ с помощью #inspect или #close.

Однако отброшенный объект File никуда не делся; это просто недоступно каким-либо очевидным образом. Пока объект не будет завершен, Руби должен где-то его отслеживать... но где?

21
задан Todd A. Jacobs 6 June 2012 в 20:48
поделиться