Po nějakém průzkumu skutečně existují určité okolnosti, za kterých vrátí 0, o kterých si možná nebudete myslet, že jsou "EOF".
Odvážné podrobnosti naleznete v definici POSIX pro read():http://opengroup.org/onlinepubs/007908775/xsh/read.html
Některé pozoruhodné jsou, když jej požádáte, aby přečetl 0 bajtů – dvakrát zkontrolujte, zda mu omylem nepředáváte 0 – a čtení za koncem „zapsané“ části souboru (ve skutečnosti můžete hledat za koncem souboru, který "rozšíří" soubor o nuly, pokud tam zapíšete, ale dokud to neuděláte, "EOF" je stále na konci již napsané části).
Můj nejlepší odhad je, že se někde dostáváte do problému s načasováním. Některé otázky, které si musíte položit, jsou "Jak se tyto soubory zapisují?" a "Jsem si jistý, že nemají nulovou délku, když se je pokouším číst?". V druhém případě můžete zkusit spustit stat() na souboru před jeho přečtením, abyste viděli, jaká je jeho aktuální velikost.
Jediný další případ, který mě napadá, že read() vrací 0 je, když předáte nbytes jako 0; někdy se to může stát, pokud předáváte velikost něčeho nebo jiného jako parametr. Mohlo by to být to, co se právě teď děje?
Pokud soubor není připraven ke čtení, mělo by se stát, že čtení vrátí -1 a errno je nastaveno na EAGAIN.