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()