потоки примерно на таком низком уровне, как вы можете получить ..
и они могут быть небуферизованными.
int setvbuf(
FILE *stream,
char *buffer,
int mode,
size_t size
);
Пример
setvbuf(stdout, (char *)NULL, _IONBF, 0); //unbuffered stdout
вот выдержка из справочного документа vc2008.
Функция setvbuf позволяет программе контролировать как буферизацию, так и размер буфера для потока. Поток должен ссылаться на открытый файл, который не подвергался операции ввода-вывода с момента его открытия. Массив, на который указывает буфер, используется в качестве буфера, если он не равен NULL, и в этом случае setvbuf использует автоматически выделенный буфер длиной / 2 * 2 байта.
Режим должен быть _IOFBF , _IOLBF или _IONBF . Если режим _IOFBF или _IOLBF , то размер используется в качестве размера буфера. Если режим равен _IONBF, поток не буферизируется, а размер и буфер игнорируются. Значения для режима и их значения:
_IOFBF
Полная буферизация; то есть буфер используется в качестве буфера, а размер используется в качестве размера буфера. Если буфер равен NULL, используется автоматически выделенный размер буфера в байтах.
_IOLBF
Для некоторых систем это обеспечивает буферизацию строки. Однако для Win32 поведение такое же, как _IOFBF - полная буферизация.
_IONBF
Буфер не используется, независимо от буфера или размера.