Я написал 'сток', используя boost :: iostreams, так что я могу, по сути, запускать свой собственный код, когда кто-то пытается писать в объект iostream.
К сожалению, где-то в буфере естьсистема, так что функция write () моего Sink вызывается только каждые 4kB или около того.Это проблема, потому что реализуемый мной приемник имеет фиксированный размер (например, 128 байт), поэтому после записи этого большого количества данных необходимо вернуть вызывающей стороне ошибку (что-то вроде 'disk full').
Из-за буфера вызывающая сторона может записать несколько килобайт данных, и ошибки не возвращаются, затем, когда буфер очищается, лишние данные автоматически теряются, что вызывает у меня проблемы.
Кто-нибудьзнаете, возможно ли как-то отключить этот буфер?Я попробовал многие из предложенных здесь предложений для общих iostreams (например, pubsetbuf), но ни одно из них, похоже, не применимо к реализации Boost.
Код проблемы является частью библиотеки, над которой я работаю, которая является доступно из GitHub , если это поможет (запустите 'make check', и вы увидите один сбой из-за этой проблемы.)
Буду признателен за любые предложения!