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) <>)) > > -- > 植山 類