2016-04-08 8 views
2

Ben buradaSTDOUT/dev/null yeniden açıldığında bir dosya modu belirtmenin önemi nedir?

boş dev /, stdout Stdin stderr'yi yönlendirerek, sonra tekrar Çatallama, yeni bir oturum oluşturarak, forking bir cini oluşturan bir örnek yakut senaryoyu/okuyorum yönlendirme bir parçacık İşte:

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

Bu durumda dosya modunu ('a') belirtmenin önemi nedir? davranış

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

hatta

STDOUT.reopen '/dev/null' 

ile, örneğin, herhangi bir farklı olurdu?

cevap

1

Orada özel bir anlam ifade, ama STDOUTappend veya write değil read olduğunu beklenebilir bir okuyucuya semantik yararlı olur. Ayrıca, varsayılan olarak (tipik olarak read) gelecekte olabilecek değişikliklere karşı savunmasızdır. Aslında Ruby, STDIN veya STDOUT modunu değiştirmeye karşı korumalara sahiptir.

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>' 

Bu, diğer IO'larda da çalışır ve açık olmak her zaman iyidir.

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

f.reopen('file.out', 'r') 
puts f.read 
$ ruby test.rb 
Hi 
İlgili konular