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


C语言 setbuf用法及代码示例


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

用法:

void setbuf ( FILE * stream, char * buffer );
设置流缓冲区
指定缓冲供...使用进行I /O操作完全缓冲流。或者,如果缓冲是一个空指针,为该缓冲区禁用了缓冲,成为无缓冲流。

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

假定缓冲区至少为BUFSIZ字节大小(请参阅setvbuf以指定缓冲区的大小)。

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

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

A 全缓冲流只要有足够的数据,就使用缓冲区的整个大小作为缓冲区(请参见setvbuf对于其他缓冲模式)。

使用默认分配的缓冲区打开所有文件(完全缓冲)(如果已知它们不是指交互式设备)。此函数可用于设置要用作缓冲区的特定存储块或禁用流的缓冲。

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

对该函数的调用等同于调用setvbuf_IOFBF模式BUFSIZ尺寸(什么时候缓冲不是null指针),或等效于使用_IONBF模式(当它为空指针时)。

参数

stream
指向一个指针FILE标识开放流的对象。
buffer
用户分配的缓冲区。至少应BUFSIZ个字节长。
或者,可以指定空指针以禁用缓冲。

返回值

没有。

示例

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

int main ()
{
  char buffer[BUFSIZ];
  FILE *pFile1, *pFile2;

  pFile1=fopen ("myfile1.txt","w");
  pFile2=fopen ("myfile2.txt","a");

  setbuf ( pFile1 , buffer );
  fputs ("This is sent to a buffered stream",pFile1);
  fflush (pFile1);

  setbuf ( pFile2 , NULL );
  fputs ("This is sent to an unbuffered stream",pFile2);

  fclose (pFile1);
  fclose (pFile2);

  return 0;
}


在此示例中,打开了两个文件进行写入。与文件关联的流myfile1.txt设置为用户分配的缓冲区;对其进行写操作;数据在逻辑上是流的一部分,但是直到fflush函数被调用。
示例中与文件关联的第二个缓冲区myfile2.txt设置为无缓冲,因此后续的输出操作将尽快写入设备。
但是,一旦关闭文件,最终状态对于缓冲流和未缓冲流都是相同的(关闭文件会刷新其缓冲区)。

相关用法


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