Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > class IO > eof
eof -> bool
eof? -> bool
ストリームがファイルの終端に達した場合、true を返します。そうでない場合、false を返します。
f = File.new("testfile") dummy = f.readlines f.eof #=> true
自身がパイプやソケットなどのストリームであった場合、相手がデータを送るか close するまでブロックします。
r, w = IO.pipe Thread.new { sleep 10; w.close } r.eof? #=> 10秒ブロックしてから true を返す。 r, w = IO.pipe Thread.new { sleep 10; w.puts "a" } r.eof? #=> 10秒ブロックしてから true を返す。 r, w = IO.pipe r.eof? # 永久にブロックします。
eof, eof? は入力バッファにデータを読み込むので、IO#sysread と同時に使うと正常に 動作しません。