[Gauche-devel-jp] dup2(2)のインターフェイス

Back to archive index

Shiro Kawai shiro****@lava*****
2007年 8月 15日 (水) 09:37:19 JST


取り込みました。thanks.

--shiro

From: "Rui Ueyama" <rui31****@gmail*****>
Subject: [Gauche-devel-jp] dup2(2)のインターフェイス
Date: Sun, 12 Aug 2007 17:08:29 +0900

> dup2(2)のインターフェイスを作成してみました。どういうインターフェイス
> を用意するのが良いか迷ったのですが、次のようにしてみました。
> 
>   (port-fd-dup! toport fromport)
> 
>   アトミックにtoportのファイルディスクリプタをクローズし、fromportの
>   ファイルディスクリプタ番号を複製したものをtoportに設定します。
>   toport、fromportはいずれもファイルポートでなければなりません。
> 
> 前にLingrで議論したときには、toportのfdを閉じてからfromportのfd
> をdup2()する間に別スレッドがファイルをオープンすると、toportのfdが
> そちらに使われてしまって問題が起こるよね、という話をしたような
> 気がしますが、このパッチではtoportのfdをクローズせずにdup2()を
> 呼んでいるのでそういう競合状態はありません。
> (manページでは、クローズせずにdup2()を呼ぶとクローズの際のエラー
> が失われてしまう旨の記述があるのですが、いまのGaucheはclose()
> のエラーを調べていないようなのでそれは問題ないかなと。)
> 
> ちなみにdup2()がほしい理由は、Gaucheで書かれたプロセスを
> デーモン化するときに、標準入出力を/dev/nullにリダイレクトしたいから
> です。たとえば現在の出力を/dev/nullにリダイレクトするコードは、
> port-fd-dup!を使うと次のようにかけます。
> 
> (call-with-output-file "/dev/null"
>   (cut port-fd-dup! (current-output-port) <>))
> 
> -- 
> 植山 類




Gauche-devel-jp メーリングリストの案内
Back to archive index