Я написал «раковину», используя boost :: iostreams, так что я могу по существу запустить свой собственный код, когда кто-то пытается записать объект iostream.Как вы можете отключить буфер в boost :: iostreams sink?
К сожалению, в системе есть буфер, так что функция write() моей Sink вызывает только каждый 4kB. Это проблема, потому что приемник, который я реализую, является фиксированным размером (например, 128 байтов), поэтому, как только это много данных было записано, ему нужно вернуть ошибку вызывающему абоненту (что-то вроде «полный диск».)
буфера, вызывающий может записать несколько килобайт данных, а ошибки не возвращаются, а затем, когда буфер сброшен, лишние данные теряются, что вызывает у меня проблемы.
Кто-нибудь знает, возможно ли каким-то образом отключить этот буфер? Я пробовал много предложений здесь для общих iostreams (например, pubsetbuf), но ни один из них, похоже, не применяется к реализации Boost.
Код проблема является частью библиотеки я работаю, который available from GitHub, если это помогает (бег «сделать чек», и вы увидите одну неудачу из-за этой проблемы.)
Любые предложения будут значительно оценили!
Хмм ... документация по буферизации говорит '[Будет поставляться в следующей версии]' датирована 02.02.2008 г. ... вздох ... – Inverse