たぶん akr さん
遠藤です。

foo.txt というファイルが存在する状況で、

  File.new("foo.txt", File::APPEND)

や

  File.new("foo.txt", File::RDONLY|File::APPEND)

を実行すると、1.8 では Errno::EINVAL が投げられていたのが 1.9 では
エラーにならなくなっています。

1.9 が IO の内部表現に FILE 構造体を使わなくなった影響かと予想する
のですが、正しいでしょうか。
その場合、仕様変更ということでいいでしょうか。
1.8 のコードを全く見ないで言ってるので関係なかったらすみません。


なんとなく SUSv3 を見てみたところ、

http://www.opengroup.org/onlinepubs/009695399/functions/open.html

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

-- 
Yusuke ENDOH <mame / tsg.ne.jp>