C++ Reference: Standard C++ Library reference: C Library: cstdio: setvbuf

C++官网参考链接:https://cplusplus.com/reference/cstdio/setvbuf/

函数 

setvbuf
int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
改变流缓冲
为stream指定buffer。该函数允许指定buffer的mode和size(以字节为单位)。
如果buffer是空指针,函数将自动分配一个缓冲区(使用size作为使用大小的提示)。否则,由buffer指向的数组可以用作size为字节的缓冲区。
一旦stream与打开的文件相关联,但在对其执行任何输入或输出操作之前,应该调用此函数。
流缓冲区是作为I/O操作和与流相关的物理文件之间的中介的数据块:对于输出缓冲区,数据被输出到缓冲区,直到达到其最大容量,然后它被刷新(flushed)(即:所有数据被立即发送到物理文件和清除缓冲区)。同样,从物理文件填充输入缓冲区,然后将数据发送给操作,直到耗尽为止,这时从文件获取新数据再次填充输入缓冲区。
可以通过调用fflush显式刷新流缓冲区。它们也会被fclose和freopen自动刷新,或者在程序正常终止时自动刷新。
如果知道所有文件没有引用交互设备,则使用默认分配的缓冲区(完全缓冲)打开它们。此函数可用于重新定义缓冲区size或mode,定义用户分配的缓冲区或禁用流的缓冲。
默认流stdin和stdout在默认情况下是完全缓冲的,如果它们已知不引用交互设备。否则,它们可能默认为行缓冲或无缓冲,这取决于系统和库实现。stderr也是如此,默认情况下,它总是行缓冲或无缓冲。

形参
stream
指向FILE对象的指针,该对象标识打开的流。
buffer 
用户分配的缓冲区。长度至少为size字节。
如果设置为空指针,该函数将自动分配一个缓冲区。
mode
指定文件缓冲的模式。中定义了三个特殊的宏常量(_IOFBF, _IOLBF和_IONBF)作为该形参的值:

_IOFBF

Full buffering: On output, data is written once the buffer is full (or flushed). On Input, the buffer is filled when an input operation is requested and the buffer is empty.

(完全缓冲:对于输出,一旦缓冲区满(或刷新(flushed))就写入数据。对于输入,当请求输入操作且缓冲区为空时,缓冲区将被填充。)

_IOLBF

Line buffering: On output, data is written when a newline character is inserted into the stream or when the buffer is full (or flushed), whatever happens first. On Input, the buffer is filled up to the next newline character when an input operation is requested and the buffer is empty.

(行缓冲:对于输出,在向流中插入换行符或缓冲区已满(或刷新(flushed)时写入数据,无论先发生什么。对于输入,当请求输入操作且缓冲区为空时,缓冲区将被填充到下一个换行符。)

_IONBF

No buffering: No buffer is used. Each I/O operation is written as soon as possible. In this case, the buffer and size parameters are ignored.

(无缓冲:不使用缓冲区。每个I/O操作都尽可能快地写入。在这种情况下,buffer和size形参被忽略。)

size 
缓冲区大小,以字节为单位。
如果buffer实参是一个空指针,这个值可以决定函数自动为缓冲区分配的大小。 

返回值
如果正确地将缓冲区分配给文件,则返回0值。
否则,返回非0值;这可能是由于无效的mode形参或其他分配或分配缓冲区的错误。

用例
/* setvbuf example */
#include

int main ()
{
  FILE *pFile;

  pFile=fopen ("myfile.txt","w");

  setvbuf ( pFile , NULL , _IOFBF , 1024 );

  // File operations here

  fclose (pFile);

  return 0;
}
在本例中,创建了一个名为myfile.txt的文件,并为相关的流请求了一个1024字节的完全缓冲区,因此输出到该流的数据应该只在每次1024字节的缓冲区被填充满时写入文件。
输出:

C++ Reference: Standard C++ Library reference: C Library: cstdio: setvbuf_第1张图片

另请参考
setbuf    Set stream buffer (function) (设置流缓冲(函数)) 
fopen    Open file (function) (打开文件(函数)) 
fflush    Flush stream (function) (刷新流(函数)) 

你可能感兴趣的:(C++,Reference,C,Library,c++,c语言,setvbuf,设置流缓冲方式)