いくつかの調査の後、実際には、「EOF」とは考えられない 0 を返す状況がいくつかあります。
詳細については、read() の POSIX 定義を参照してください:http://opengroup.org/onlinepubs/007908775/xsh/read.html
いくつかの注目すべきものは、0バイトを読み取るように要求した場合です-誤って0を渡していないことを再確認してください-ファイルの「書き込まれた」部分の末尾を超えて読み取ります(実際には末尾を超えてシークできます)これは、そこに書き込むとゼロでファイルを「拡張」しますが、そうするまで、「EOF」はまだ書き込まれた部分の最後にあります)。
私の最善の推測は、どこかでタイミングの問題が発生していることです。 「これらのファイルはどのように書き込まれていますか?」という質問をする必要があります。および「それらを読み取ろうとすると、それらはゼロ長ではありませんか?」. 2 番目の例では、ファイルを読み取る前にファイルで stat() を実行して、現在のサイズを確認できます。
read() が 0 を返すと考えることができる他の唯一のケースは、nbytes を 0 として渡す場合です。パラメータとして何かのサイズを渡している場合に発生することがあります。それが今起こっていることでしょうか?
ファイルを読み取る準備ができていない場合、read が -1 を返し、errno が EAGAIN に設定されます。