Каково значение указания режима файла при повторном открытии STDOUT в /dev/null?

Я читаю пример сценария ruby, который создает демон путем разветвления, создания нового сеанса, повторного разветвления, а затем перенаправления stdin, stdout, stderr в /dev/null

Вот фрагмент перенаправления:

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 ответ

Решение

Там нет особого значения, но это семантически полезно для читателя, который ожидал бы, что STDOUT является append или же write, но нет read, Это также защищает от дефолта (как правило, 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
Другие вопросы по тегам