とみたです。

引数無しの IO#read で、通常ファイル以外から BUFSIZ の倍数のデータを読み
込むと nil が返ります。

% ruby -v
ruby 1.4.2 (1999-09-17) [i686-linux]
% mknod /tmp/p p
% ruby -e 'File.open("/tmp/p","w").write("."*8192)' &
% ruby -e 'p File.open("/tmp/p").read'
nil
%

io.c の read_all() がマズイようです。これ↓で直るかな…?

*** io.c.orig	Tue Aug 31 01:21:47 1999
--- io.c	Thu Nov 18 11:44:13 1999
***************
*** 426,432 ****
  	TRAP_BEG;
  	n = fread(RSTRING(str)->ptr+bytes, 1, siz-bytes, fptr->f);
  	TRAP_END;
! 	if (n == 0) {
  	    if (feof(fptr->f)) return Qnil;
  	    rb_sys_fail(fptr->path);
  	}
--- 426,432 ----
  	TRAP_BEG;
  	n = fread(RSTRING(str)->ptr+bytes, 1, siz-bytes, fptr->f);
  	TRAP_END;
! 	if (n == 0 && bytes == 0) {
  	    if (feof(fptr->f)) return Qnil;
  	    rb_sys_fail(fptr->path);
  	}

# 既に報告済みだったらごめんなさい

--
とみたまさひろ <tommy / tmtm.org>