在c中使用setvbuf()函数有什么意义?

Kit*_*Fox 10 c

你为什么要留出一块内存setvbuf()

我不知道你为什么要将读/写流发送到缓冲区.

Mat*_*lia 5

setvbuf不打算将输出重定向到缓冲区(如果要在使用的缓冲区上执行IO sprintf和co.),而是严格控制给定流的缓冲行为.

实际上,C IO函数不会立即传递要写入操作系统的数据,而是保留一个中间缓冲区以避免连续执行(可能很昂贵的)系统调用,等待缓冲区在实际执行写入之前填充.

最基本的情况是完全禁用缓冲(例如,如果写入日志文件,您希望数据在每次输出操作后立即转到磁盘),或者另一方面,在它所在的流上启用块缓冲默认情况下禁用(或设置为行缓冲).这可能有助于提高输出性能.

如果您正在使用已知可以使用特定缓冲区大小的设备,那么为输出设置特定缓冲区会很有用; 另一方面,您可能希望有一个小缓冲区来减少内存受限环境中的内存使用,或者避免在断电时丢失大量数据而不完全禁用缓冲.


Som*_*ude 1

在 C 中,用eg打开的文件fopen默认是缓冲的。您可以使用setvbuf提供自己的缓冲区,或使文件操作完全无缓冲(就像stderr是)。

它可用于在fmemopen不具备该功能的系统上创建该功能。