From: Yusuke ENDOH Date: 2010-02-27T01:13:29+09:00 Subject: [ruby-dev:40506] [Bug:trunk] IO behaviors on mingw akr さん 遠藤です。 以下のように、IO に関して Linux と mingw で挙動が違います。 それぞれ仕様でしょうか、バグでしょうか。 1) $ ./ruby -e 'f = File.open("foo", "w"); IO.for_fd(f.fileno, "r")' linux: EINVAL mingw: 何も言わない (gets したら EBADF) 参考: http://redmine.ruby-lang.org/issues/show/1582 2) $ ./ruby -e 'f1 = File.open("foo", "w"); f2 = IO.new(f1.fileno); p f2.gets' linux: IOError mingw: EBADF 3) $ rm foo && touch foo && ./ruby -e 'f = File.open("foo"); p f.eof?; p f.getc; f.ungetc(100); p f.eof?; p f.getc' linux: true, nil, false, "d" mingw: true, nil, true, "d" 4) $ echo foo > foo && ./ruby -e 'f = File.open("foo"); f.getc; p f.pos; f.ungetc(100); p f.pos' linux: 1, 0 mingw: 1, 1 5) $ ./ruby -e 'File.open("foo", "w") {|f| f.write_nonblock("012345678901234567890123456789") }' linux: 普通に書き込まれる mingw: EBADF なんとなく想像できるものもありますが、IO はとても難解なので 下手に判断することをやめます。 -- Yusuke ENDOH