Nach einiger Recherche gibt es tatsächlich einige Umstände, unter denen es 0 zurückgibt, die Sie vielleicht nicht als "EOF" betrachten.
Die groben Details finden Sie in der POSIX-Definition für read():http://opengroup.org/onlinepubs/007908775/xsh/read.html
Einige bemerkenswerte sind, wenn Sie es auffordern, 0 Bytes zu lesen - überprüfen Sie, ob Sie nicht versehentlich 0 übergeben - und über das Ende des "geschriebenen" Teils der Datei hinauslesen (Sie können tatsächlich über das Ende hinaus suchen der Datei, die die Datei mit Nullen "erweitert", wenn Sie dort schreiben, aber bis Sie dies tun, steht "EOF" immer noch am Ende des bereits geschriebenen Teils).
Meine beste Vermutung ist, dass Sie irgendwo in ein Timing-Problem geraten. Einige Fragen, die Sie stellen müssen, lauten:"Wie werden diese Dateien geschrieben?" und "Bin ich sicher, dass sie keine Nulllänge haben, wenn ich versuche, sie zu lesen?". Für die zweite könnten Sie versuchen, ein stat() auf der Datei auszuführen, bevor Sie sie lesen, um zu sehen, wie ihre aktuelle Größe ist.
Der einzige andere Fall, in dem ich mir vorstellen kann, dass read() 0 zurückgibt, ist, wenn Sie nbytes als 0 übergeben; Manchmal kann das passieren, wenn Sie die Größe von irgendetwas als Parameter übergeben. Könnte das sein, was gerade passiert?
Wenn die Datei nicht zum Lesen bereit ist, sollte read -1 zurückgeben und errno auf EAGAIN gesetzt werden.