filesystem/directory_for_descriptor.rb
tests/_examples/filesystem/directory_for_descriptor.rb in the metorex repository.
# A Dir made over a descriptor another Dir holds reads the same directory,
# has no path, and refuses a descriptor that names no directory.
require "tmpdir"
Dir.mktmpdir do |root|
File.write(File.join(root, "notes.txt"), "")
Dir.mkdir(File.join(root, "archive"))
opened = Dir.new(root)
adopted = Dir.for_fd(opened.fileno)
p(adopted.children.sort)
p(adopted.path)
p(adopted.fileno == opened.fileno)
opened.close
end
begin
Dir.for_fd(nil)
rescue TypeError => error
puts(error.message)
end
begin
Dir.for_fd(-1)
rescue SystemCallError => error
puts(error.message)
end
begin
Dir.for_fd($stdout.fileno)
rescue SystemCallError => error
puts(error.message)
end
Output:
["archive", "notes.txt"]
nil
true
no implicit conversion from nil to integer
Bad file descriptor - fdopendir
Not a directory - fdopendir