Как определить, что я нахожусь на "конце" 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?

0 ответов

Другие вопросы по тегам