当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 setvbuf用法及代码示例


C语言stdio头文件(stdio.h)中setvbuf函数的用法及代码示例。

用法:

int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
更改流缓冲
指定一个缓冲为了。该函数允许指定模式尺寸缓冲区的字节数(以字节为单位)。

如果缓冲是一个空指针,该函数自动分配一个缓冲区(使用尺寸作为使用尺寸的提示)。否则,由指向的数组缓冲可用作缓冲尺寸个字节。

一旦已与一个打开的文件相关联,但是在对该文件执行任何输入或输出操作之前。

A 流缓冲区是作为I /O操作和与流相关联的物理文件之间的中介的数据块:对于输出缓冲区,数据一直输出到缓冲区,直到达到其最大容量为止,然后flushed(即:所有数据立即发送到物理文件并清除缓冲区)。同样,从物理文件填充输入缓冲区,然后将数据从该物理文件发送到操作,直到用尽为止,此时从文件中获取新数据以再次填充缓冲区。

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

使用默认分配的缓冲区打开所有文件(完全缓冲)(如果已知它们不是指交互式设备)。此函数可用于重新定义缓冲区尺寸或者模式,以定义user-allocated缓冲区或禁用流的缓冲。

默认流stdinstdout完全缓冲如果已知它们不引用交互式设备,则默认情况下为默认。否则,它们可能是行缓冲或者无缓冲默认情况下,具体取决于系统和库的实现。同样的道理stderr,始终是行缓冲或者无缓冲默认情况下。


参数

stream
指向一个指针FILE标识开放流的对象。
buffer
用户分配的缓冲区。至少应尺寸个字节长。
如果设置为空指针,该函数将自动分配一个缓冲区。
mode
指定文件缓冲的模式。三个特殊的宏常量(_IOFBF_IOLBF_IONBF)在中定义<cstdio>用作此参数的值:
_IOFBF完整缓冲:在输出时,一旦缓冲区已满(或刷新),就将写入数据。在输入时,当请求输入操作且缓冲区为空时,缓冲区将被填充。
_IOLBF行缓冲:在输出时,在将换行符插入流中或缓冲区已满(或刷新)时(无论先发生什么情况),都会写入数据。在输入时,当请求输入操作且缓冲区为空时,缓冲区将填充到下一个换行符。
_IONBF没有缓冲:不使用缓冲区。每个I /O操作均应尽快写入。在这种情况下,buffer和size参数将被忽略。
size
缓冲区大小,以字节为单位。
如果缓冲参数是一个空指针,此值可以确定函数自动为缓冲区分配的大小。

返回值

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

示例

/* 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字节的缓冲区时,输出到此流的数据都应写入文件中。

相关用法


注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C setvbuf function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。