Как отмечает Бен Фойгт, вы хотите создать подкласс streambuf
.На веб-сайте Университета Южной Калифорнии есть страницы с документацией , header и source для реализации GNU подкласса streambuf
(stdiobuf
) который оборачивает FILE*
.Он имеет некоторые зависимости от библиотеки, частью которой он является (GroovX), но их следует легко удалить (я бы начал с удаления всех ссылок на GVX_TRACE
).
Интересно, что он также обеспечивает минималистичныйподкласс (stdiostream
) из std::iostream
, несмотря на то, что сказал Бен Фойгт.Но в этом нет необходимости, поскольку метод rdbuf («буфер чтения» / установка буфера потока), который класс stdiostream
использует для подключения класса stdiobuf
к объекту потока, является открытымavailable.
Подробнее о подклассах streambuf
вы можете узнать здесь (смотрите, в частности, внизу страницы, где обсуждаются виртуальные функции).Реализация, связанная выше, переопределяет sync
, underflow
(для поддержки ввода) и overflow
(для поддержки вывода).
Дополнительные замечания о связанной реализации:
- В методе
init
используются методы setg
и setp
для установки указателей длявходные и выходные последовательности. - Строка
const int num = pptr()-pbase();
вычисляет количество очищаемых символов путем вычитания базового выходного указателя из текущего выходного указателя ("put"указатель "). - Переменная с именем
om
является параметром режима. - Переменная с именем
fd
является дескриптором файла.