В API POSIX 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 более высокого уровня, такие как fread()
и feof()
в C, и создает много путаницы в отношении того, как правильно использовать feof()
: