From: nobu.nakada@... Date: 2001-06-05T13:44:30+09:00 Subject: [ruby-dev:13473] Re: ext/extmk.rb.in なかだです。 At Tue, 5 Jun 2001 10:52:16 +0900, WATANABE Hirofumi wrote: > 実を言うと[ruby-dev:13456]に関しては、こちらでは全然違う結果 > になります…。 > > % d:/usr/local/bin/ruby -ve 'include FileTest; p [exist?("nul"), readable?("nul"), writable?("nul")]' > ruby 1.6.4 (2001-05-26) [i386-mingw32] > [false, true, true] > > どちらもWinNT 4.0での話。 Win98 では全く逆転します。しかし、FileTest.readable?("nul") は false なのに、File.stat("nul").readable? は true だったり、 どうも完全にシステムコールレベルで互換性がないような。 File.exist?("nul") ? File.stat("nul").writable? : File.writable?("nul") (File.stat("nul").writable? rescue File.writable?("nul")) とか。うーん、わけわからん。 > あ、/dev/nullなら全部trueになる。 > % ruby -ve 'include FileTest; p [exist?("/dev/null"), readable?("/dev/null"), writable?("/dev/null")]' > ruby 1.6.4 (2001-06-04) [i386-cygwin] > [true, true, true] もちろん cygwin は問題ないんですけどね。問題なのは mingw32 と mswin32、要するに msvcrt.dll を使うやつだけ。VC のランタイムの ソースをみると、GetFileAttributes() と FindFirstFile() が NT と 9x ではデバイス名に対して逆の動作をするように思えます。 しかし、File.stat の結果も妙だ…。なんで size=201? chardev? も false だし。 $ ./i686-mingw32/ruby -ve 'p File.stat("nul")' ruby 1.6.4 (2001-06-04) [i686-mingw32] # -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦