0

STDINすべての UNIX プロセスには、STDOUTおよびの3 つのオープン リソースが付属していることを知ってSTDERRいます。次のようなファイルを開くと、

passwd = File.open('/etc/passwd')
puts passwd.fileno`

これらのリソースの数は増加します。Rubyプロセスが開くすべてのリソースを取得する方法はありますか?

4

1 に答える 1

2

IO通常、Ruby 内で外部プロセスを実行しても、別のオブジェクトが開かれることはありません。明示的に変更しない限り、同じSTDERRSTDOUT、およびSTDINが共有されます。すべてのIOs を取得するには、次のようにします。

ObjectSpace.each_object(IO).to_a
# => [
#   #<IO:<STDERR>>,
#   #<IO:<STDOUT>>,
#   #<IO:<STDIN>>,
#   #<IO:fd 1>,
#   #<IO:fd 0>,
#   #<File:/usr/local/lib/ruby/2.0.0/irb/lc/error.rb (closed)>
# ]
于 2013-03-26T14:56:29.307 に答える