2016-04-08 9 views
2

Iでは、/ dev/nullにstderrを、STDOUTを/ dev/nullに再オープンするときに、ファイルモードを指定することの意義は何ですか?

を、フォーク新しいセッションを作成し、再びフォーク、その後、標準入力をリダイレクトする、標準出力でデーモンを作成する例のRubyスクリプトを読んでいるがここでは、リダイレクトの抜粋です:

STDIN.reopen '/dev/null' 
STDOUT.reopen '/dev/null', 'a' 
STDERR.reopen '/dev/null', 'a' 

この場合、ファイルモード('a')を指定することの意義は何ですか?動作は

STDOUT.reopen '/dev/null', 'w' 

あるいは

STDOUT.reopen '/dev/null' 

で、例えば、任意の異なるだろうか?

答えて

1

そこには特に意味はないのですが、それはSTDOUTreadappendまたはwriteですが、ないことを期待する読者にとって意味的に便利です。将来的にデフォルト(通常はread)が変更されても防御的であり、それはそうであるとは考えにくい。実際にはRubyはSTDINまたはSTDOUTのモードを変更しないように保護しています。

STDOUT.reopen '/dev/null', 'r' 

test.rb:1:in `reopen': <STDOUT> can't change access mode from "w" to "r" (ArgumentError) 
from test.rb:1:in `<main>' 

これは他のIOでも機能しますが、それは明示的であることが常に良いです。

f = File.open('file.out', 'w') 
f.puts 'Hi' 
f.close 

f.reopen('file.out', 'r') 
puts f.read 
$ ruby test.rb 
Hi 
関連する問題