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

setbuf

函数  <cstdio>

void setbuf ( FILE * stream, char * buffer );
设置流缓冲区
指定流用于I/O操作的缓冲区,它将成为一个完全缓冲的流。 如果buffer是空指针,则对流禁用缓冲,这将成为一个未缓冲的流。

一旦流与打开的文件相关联,在对该文件执行任何输入或输出操作之前,应该调用此函数。
假设缓冲区的大小至少为BUFSIZ字节 (请参阅setvbuf来指定缓冲区的大小)。

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

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

当有足够的数据可用时,一个完整的缓冲流使用缓冲区的整个大小作为缓冲区(其他缓冲模式请参阅setvbuf)。

如果已知所有文件没有引用交互设备,那么它们将使用默认分配的缓冲区(完全缓冲)打开。 此函数可用于设置特定的内存块作为缓冲区或禁用流的缓冲。

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

对这个函数的调用相当于以_IOFBF为模式、BUFSIZ为大小(当buffer不是空指针时)调用setvbuf, 或以_IONBF为模式(当它是空指针时)调用setvbuf

☲  参数


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

buffer
用户分配的缓冲区。长度至少为BUFSIZ字节。
或者,可以指定一个空指针来禁用缓存。。

☉  返回值



none

☣  示例



/* 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相关联)被设置为无缓冲区,因此随后的输出操作将尽快写入设备。

然而,一旦文件被关闭,缓冲流和非缓冲流的最终状态是相同的(关闭文件将刷新其缓冲区)。

🍄  另请参阅



fflush 刷新流 (function )
fopen 打开文件(function )
setvbuf 改变流缓冲区(function )

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