Чтобы понять, почему это может иметь место, поймите, что конец потока по своей природе не является постоянной ситуацией . Указатель на чтение файла может находиться в конце, но если после операции записи будет добавлено больше данных, последующие операции чтения будут успешными.
Пример: в Linux при чтении из консоли новая строка, за которой следует ^D
, приведет к тому, что posix::read()
вернет ноль (что означает «конец файла»). Однако, если программа не завершена, она может продолжить чтение (при условии, что введены дополнительные строки).
Поскольку конец потока не является постоянной ситуацией, возможно, имеет смысл даже не иметь функцию is_at_end () (POSIX нет). К сожалению, это накладывает дополнительное бремя на программиста (и / или библиотеку-обертку), чтобы элегантно и эффективно справляться с этой сложностью.