From: KOSAKI Motohiro Date: 2011-10-31T11:48:00+09:00 Subject: [ruby-dev:44718] Re: [ruby-changes:21512] akr:r33561 (trunk): * configure.in: check dup3. 2011年10月30日17:30 Tanaka Akira : > 2011年10月31日5:26 KOSAKI Motohiro : >> >> akrさん、このコードなんですが、rb_cloexec_dup2(oldfd, newfd)のoldfdとnewfdが一致する可能性は >> あるでしょうか?あるとしたら、どういう動作をすべきと意図しているAPIでしょうか? > > 公開APIなので、可能性はあり得るでしょう。 > > 動作は、dup2() + CLOEXECをセット、という名前なので、 > 一致したら、CLOEXECをセットだけがいいかなぁ。 了解しました。 dup3(O_CLOEXEC)とは動作が違うので関数先頭にoldfd == newfdの時についての コメントがあるとよいように思います。 >> btw, めちゃくちゃ余談なんですが、dup3でEINVALにしてるのは本当にいい仕様なんですかねえ? > > dup3 だけの仕様としてみれば悪くないように思えます。 > oldfd == newfd かどうかで close の回数が変わってきますから、 > いずれその判断はアプリケーション側でやらないといけないでしょう。 > どうせやるなら dup3 の前にやることを勧めてもいいのでは。 > > dup2 の drop in replacement として使いにくいという点との比較については、 > どの段階の状況を重視するかですかねぇ。 なるほど。じゃあLinuxは変えないでもいいかな