[ruby-dev:31691] Re: IO.sysdup2, IO.sysdup, IO.sysclose

From: sheepman <sheepman@...>
Date: 2007-09-01 06:54:48 UTC
List: ruby-dev #31691
こんばんは、sheepman です。

Ruby での dup2 の必要性というのが良く分からないので質問させて下さい。

>  例えば、sh の 3>&1 を実現するにはは dup2(1,3) を呼び出さない
>  といけないわけですが、IO#reopen でこれを行うには、まず fd が
>  3 な IO オブジェクトをえる必要があります。しかし、3 が close
>  状態だと、IO.new ができません。では 3 をどうにかして open 状
>  態に... とか考えるよりは dup2 がいきなり使えるのが良かろう、
>  というわけです。

sh などでの 3>&1 の 3 というのは一時変数みたいなものなので、
3 を具体的に指定できる必要性はないはずです。例えば、

$ command 3>&1 >/dev/null 2>&3

みたいなことを Ruby でしたいときは

fd3 = $stdout.dup
$stdout.reopen('/dev/null')
$stderr.reopen(fd3)

とすれば良いのではと思うのですが。fd を具体的に指定できた方がうれしいのは
どういったばあいでしょうか?

-- 
sheepman / TAMURA Takashi
sheepman@sheepman.sakura.ne.jp

In This Thread