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

3

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]