ruby-devの皆様

子プロセスの標準出力をリダイレクトするために、
fork{
   STDOUT.reopen(io)
   exec("/path/to/commnad")
}
のようなことをしようとすると、reopenのところで、STDOUTのバッファがflush
されて、親プロセスの分と2重に非同期に出力されることになって不都合です。
forkのまえに、flushしておけば回避できそうですが、バッファを出力せず、
強制的にclose(2)を呼び出すことができれば、スムーズにリダイレクトできそうです。
現状では、もちろん、syscall(6,1)とかを発行する事ができますが、
番号にポータビリティが保証されていないので、rubyからclose_fd!
のような関数で、バッファーをflushせずに、特定のfile descriptorを
解放できるといいと思います。
あるいは、reopen!だとバッファーをflushしないなどの手も考えられるかもしれません。
いかがでしょう。
-- 
西山智明