Home C&C++函数库 c++ 语法 程序源码 Linux C库

setvbuf

函数  <cstdio>

int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
改变流缓冲
指定流的缓冲区。该函数允许指定缓冲区的模式和大小(以字节为单位)。

如果buffer是空指针,函数会自动分配一个缓冲区(使用size作为使用大小的提示)。 否则,buffer所指向的数组可能被用作大小为字节的缓冲区。
一旦流与打开的文件相关联,但在对该文件执行任何输入或输出操作之前,应该调用此函数。

流缓冲区的数据块,充当中介之间的i / o操作和相关的物理文件流: 输出缓冲区,数据输出缓冲区,直到其达到最大容量,然后刷新 (例如:所有数据发送到物理文件,缓冲了)。同样,输入缓冲区由物理文件填充, 数据从物理文件发送到操作,直到耗尽,此时从文件获取新数据以再次填充缓冲区。

可以通过调用fflush显式刷新流缓冲区。 它们也会被fclosefreopen自动刷新, 或者在程序正常终止时自动刷新。

如果已知所有文件没有引用交互设备,那么它们将使用默认分配的缓冲区(完全缓冲)打开。 此函数可用于重新定义缓冲区大小或模式,定义用户分配的缓冲区或禁用流的缓冲。

如果已知缺省流stdinstdout没有引用交互设备,则默认完全缓存它们。否则, 根据系统和库的实现,默认情况下,它们可能是行缓冲的或非缓冲的。对于stderr也是如此, 默认情况下它总是被行缓冲或未缓冲。

☲  参数


stream
指向标识打开流的FILE对象的指针。

buffer
用户分配的缓冲区。长度至少为size字节。
如果设置为空指针,函数将自动分配一个缓冲区。
mode
指定文件缓冲模式。在<cstdio> 中定义了三个特殊的宏常量(_IOFBF, _IOLBF和_IONBF),用作这个参数的值:
_IOFBF 完全缓冲 : 在输出时,一旦缓冲区满了(或刷新),就写入数据。 在Input上,当请求一个输入操作且缓冲区为空时,缓冲区将被填充。
_IOLBF 行缓冲 : 输出时,在流中插入换行字符或缓冲区满(或刷新)时写入数据, 无论先发生什么。在Input上,当请求输入操作时,缓冲区为空, 缓冲区将被填满到下一个换行符。
_IONBF 无缓存 : 不使用缓存。每次I/O操作都尽可能快地写入。在这种情况下,buffer和size参数被忽略。


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

☉  返回值



如果缓冲区被正确地分配给文件,则返回一个零值。
否则,返回一个非零值;
这可能是由于无效的模式参数或其他分配或分配缓冲区的错误。

☣  示例



/* setvbuf example */
#include <stdio.h>

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字节的缓冲区被填满时,才应该将输出到该流的数据写入文件。

🍄  另请参阅



fflush 刷新流 (function )
fopen 打开文件(function )
setbuf 设置流缓冲区 (function )

联系我们 免责声明 关于CandCplus 网站地图