2010年2月10日23:20 Yusuke ENDOH <mame / tsg.ne.jp>:
>
> を実行すると、1.8 では Errno::EINVAL が投げられていたのが 1.9 では
> エラーにならなくなっています。
>
> 1.9 が IO の内部表現に FILE 構造体を使わなくなった影響かと予想する
> のですが、正しいでしょうか。
> その場合、仕様変更ということでいいでしょうか。
> 1.8 のコードを全く見ないで言ってるので関係なかったらすみません。

1.8.8 では fdopen(fd, "a") が EINVAL になっていますね。

1.8.1 以前は EINVAL にならないのですが、これは fdopen(fd, "r") と
なっているからのようです。

> O_APPEND は (write の前に) file offset を終端に持ってくるというだけ
> で、O_RDONLY と組み合わせてはいけないようなことは書かれていないので
> 1.9 が正しい気がします (FILE 構造体をバックエンドにしていると難しい
> のかもしれませんが) 。

1.8.2 から 1.8.8 が間違っている、というのが素直な気がします。

あと、fd から O_APPEND かどうか調べられない環境では現状の 1.8 でも
EINVAL にはなっていない気がしますね。Windows とか?
-- 
[田中 哲][たなか あきら][Tanaka Akira]