Setelah beberapa penelitian, sebenarnya ada beberapa keadaan di mana ia akan mengembalikan 0 yang mungkin tidak Anda anggap sebagai "EOF".
Untuk detailnya, lihat definisi POSIX untuk read():http://opengroup.org/onlinepubs/007908775/xsh/read.html
Beberapa yang penting adalah jika Anda memintanya untuk membaca 0 byte -- periksa kembali bahwa Anda tidak secara tidak sengaja memberikan 0 padanya -- dan membaca melewati akhir bagian "tertulis" dari file (Anda sebenarnya dapat mencari melewati bagian akhir file, yang "memperluas" file dengan nol jika Anda menulis di sana, tetapi sampai Anda melakukannya, "EOF" masih berada di akhir bagian yang sudah ditulis).
Tebakan terbaik saya adalah Anda mengalami masalah waktu di suatu tempat. Beberapa pertanyaan yang perlu Anda tanyakan adalah "Bagaimana file-file ini ditulis?" dan "Apakah saya yakin panjangnya tidak nol saat saya mencoba membacanya?". Untuk yang kedua, Anda dapat mencoba menjalankan stat() pada file sebelum membacanya untuk mengetahui ukurannya saat ini.
Satu-satunya kasus lain yang dapat saya pikirkan tentang read() mengembalikan 0 adalah jika Anda meneruskan nbytes sebagai 0; kadang-kadang itu bisa terjadi jika Anda memasukkan ukuran sesuatu atau lainnya sebagai parameter. Mungkinkah itu yang terjadi saat ini?
Jika file belum siap untuk dibaca, yang harus terjadi adalah read mengembalikan -1 dan errno disetel ke EAGAIN.