Как определить, что я нахожусь на "конце" QIODevice?
Я пытаюсь придумать алгоритм, чтобы определить, когда "конец" QIODevice
достигнуто (что означает, что больше данных никогда не будет доступно для чтения). В настоящее время мой алгоритм выглядит примерно так:
- для последовательных устройств, подождите
readChannelFinished()
сигнал - для обычных файлов постоянно читайте данные до
atEnd()
возвращаетсяtrue
Тем не менее, документация для atEnd()
содержит следующее предупреждение:
Для некоторых устройств atEnd() может возвращать true, даже если есть еще данные для чтения. Этот особый случай применяется только к устройствам, которые генерируют данные в прямом ответе на ваш вызов read() (например, файлы /dev или /proc в Unix и OS X или консольный ввод / stdin на всех платформах).
Это где мой алгоритм ломается. Моей следующей идеей было постоянно проверять ценность bytesAvailable()
при чтении из обычного файла. Это дало очень странные результаты для /dev/zero
: bytesAvailable()
возвращенный 0
пока я не призвал read(amount)
в этот момент он указал, что были 16384 - amount
осталось байтов.
Есть ли "правильный" способ определить, есть ли еще данные, доступные для чтения с QIODevice
?