2011年10月30日17:30 Tanaka Akira <akr / fsij.org>:
> 2011年10月31日5:26 KOSAKI Motohiro <kosaki.motohiro / gmail.com>:
>>
>> 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は変えないでもいいかな