【问题标题】:What's the significance of specifying a file mode when reopening STDOUT to /dev/null?重新打开STDOUT到/dev/null时指定文件模式有什么意义?
【发布时间】:2016-04-08 00:16:46
【问题描述】:

我正在阅读一个示例 ruby​​ 脚本,它通过分叉、创建新会话、再次分叉,然后将 stdin、stdout、stderr 重定向到 /dev/null 来创建守护进程

这是重定向的sn-p:

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

在这种情况下指定文件模式('a')有什么意义?行为是否会有所不同,例如,

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

甚至

STDOUT.reopen '/dev/null'

?

【问题讨论】:

    标签: ruby io-redirection dev-null


    【解决方案1】:

    没有特别的意义,但它在语义上对希望STDOUTappendwrite 但不是read 的读者有帮助。它还可以防御默认值(通常是read)在未来发生变化,尽管这不太可能发生。事实上,Ruby 有防止改变STDINSTDOUT 的模式。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 2017-11-30
      • 2011-05-01
      • 1970-01-01
      • 2011-05-14
      • 2018-02-25
      • 1970-01-01
      • 2018-08-12
      相关资源
      最近更新 更多