[#39699] デーモン・プロセスの作り方 — "Mitsuyasu Ichimura" <mitsuyasu@...>

こんにちは、市村と申します。

27 messages 2004/06/01
[#39710] Re: デーモン・プロセスの作り方 — Masayoshi Takahashi <maki@...> 2004/06/01

高橋征義です。宣伝モードです(_o_)

[#39711] Re: デーモン・プロセスの作り方 — nobu.nakada@... 2004/06/01

なかだです。

[ruby-list:39737] Re: デーモン・プロセスの作り方

From: とみたまさひろ <tommy@...>
Date: 2004-06-04 05:10:39 UTC
List: ruby-list #39737
とみたです。

On Fri, 4 Jun 2004 04:00:51 +0900
GOTOU Yuuzou <gotoyuzo@notwork.org> wrote:

> IO#reopenは、IOが保持しているディスクリプタを同じ値を保った
> まま開き直します。上記のコードではforkの後にexecやsystemを呼
> んだ場合にも標準入出力が/dev/nullを向いていることを期待して
> います。
> 
> 一方、$stdin/$stdout/$stderrはgets、print、warnなど、Rubyレ
> ベルでのデフォルトの入出力先を「代入することによって」切替え
> るためのインターフェースです。これらが、すでに置き替えられて
> いる場合は、reopenしてもプロセスのレベルで標準入出力が切り替
> わるわけではありませんから、ここではSTDIN/STDOUT/STDERRを使
> うのが好ましいと考えています。

ああ、なるほど。グローバル変数だから代入できてしまう… というところが
ミソなんですね。

Ruby 1.6.x の頃は $stdout = io_object としても、内部で reopen (dup?) 
されていたと思うのですが、1.8.x だと本当に代入しているだけなんですね。
気が付きませんでした。

-- 
とみたまさひろ <tommy@tmtm.org>

In This Thread