1

POSIX API では、read()ファイルの終わりに達したことを示すために 0 を返します。read()実際に を呼び出す必要なしに、ゼロを返すことを示す別の関数がないのはなぜread()ですか?


質問の理由:read()失敗することを発見するために呼び出す必要があるため、ファイル読み取りアルゴリズムがより複雑になり、不要なターゲット バッファーを割り当てる必要があるため、効率がわずかに低下する可能性があります。

私たちがやりたいことは...

while ( !eof )
   {
   allocate buffer
   read to buffer
   process buffer
   }

代わりに私たちがしなければならないことは...

while ( true )
   {
   allocate buffer
   read to buffer
   if ( eof ) release buffer, break;
   process buffer
   }

fread()さらに、この動作は C のやなどの高レベルの API にも伝播しているようで、正しくfeof()使用する方法について多くの混乱を引き起こしています。feof()

4

1 に答える 1