EOFが返ってこないもの(/dev/zeroとか/dev/urandomとか)を読むなら終了条件がEOFまで読んだらってのがおかしい