setvbuf不打算将输出重定向到缓冲区(如果要在使用的缓冲区上执行IO sprintf和co.),而是严格控制给定流的缓冲行为.
实际上,C IO函数不会立即传递要写入操作系统的数据,而是保留一个中间缓冲区以避免连续执行(可能很昂贵的)系统调用,等待缓冲区在实际执行写入之前填充.
最基本的情况是完全禁用缓冲(例如,如果写入日志文件,您希望数据在每次输出操作后立即转到磁盘),或者另一方面,在它所在的流上启用块缓冲默认情况下禁用(或设置为行缓冲).这可能有助于提高输出性能.
如果您正在使用已知可以使用特定缓冲区大小的设备,那么为输出设置特定缓冲区会很有用; 另一方面,您可能希望有一个小缓冲区来减少内存受限环境中的内存使用,或者避免在断电时丢失大量数据而不完全禁用缓冲.