在 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
}
此外,这种行为似乎会传播到更高级别的 API 中,例如Cfread()
和feof()
C 中 - 并且在如何feof()
正确使用方面造成了很多混乱: