SDL2 определяет потоковую абстракцию ввода / вывода, SDL_RWops
, которая поддерживает чтение, запись, поиск и т. Д. c.
Документация для SDL_RWops
функции чтения говорит, что каждая реализация
Возвращает количество прочитанных объектов или 0 в случае ошибки или конца файла; вызовите SDL_GetError () для получения дополнительной информации.
Поскольку один и тот же код ошибки используется как для ошибки, так и для EOF, нет способа отличить guish между этими двумя условиями только с помощью этого вызов. Похоже, нет другого способа запросить RWops
для условия конца файла.
Подпись для SDL_GetError()
:
const char* SDL_GetError(void)
... другими словами, он также совершенно не подходит для проведения различий между этими условиями.
Итак, как мы можем узнать, произошла ли ошибка или поток просто достиг конца файла?
Одна хорошая мысль - использовать SDL_RWseek()
для получения текущей позиции потока, затем искать до конца, сравнивать две позиции и искать назад. Тем не менее, это не работает в целом - потому что не все потоки могут искать (например, реализация сетевого потока или поток, который на лету распаковывается из ввода какого-либо другого потока, и т. Д. c ... в общем, поиск может просто не поддерживаться).