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

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

函数
<cstdio>
setbuf
void setbuf ( FILE * stream, char * buffer );
设置流缓冲区
指定stream用于I/O操作的buffer,这将成为一个完全缓冲的stream。或者,如果buffer是空指针,则对stream禁用缓冲,使其成为无缓冲的stream
一旦流与打开的文件相关联,但在对其执行任何输入或输出操作之前,应该调用此函数。
buffer的大小至少被假定为BUFSIZ字节(请参阅setvbuf以指定buffersize)。
流缓冲区是作为I/O操作和与流相关的物理文件之间的中介的数据块:对于输出缓冲区,数据被输出到缓冲区,直到达到其最大容量,然后它被刷新(flushed)(即:所有数据被立即发送到物理文件和清除缓冲区)。同样,从物理文件填充输入缓冲区,然后将数据发送给操作,直到耗尽为止,这时从文件获取新数据再次填充输入缓冲区。
可以通过调用fflush显式刷新流缓冲区。它们也会被fclosefreopen自动刷新,或者在程序正常终止时自动刷新。
只要有足够的数据可用,完全缓冲的stream就使用buffer的整个大小作为缓冲区(有关其他缓冲模式,请参阅setvbuf)。
如果知道所有文件没有引用交互设备,则使用默认分配的缓冲区(完全缓冲)打开它们。这个函数可以用来设置一个特定的内存块用作buffer,或者禁用stream的缓冲。
默认流stdinstdout在默认情况下是完全缓冲的,如果它们已知不引用交互设备。否则,它们可能默认为行缓冲或无缓冲,这取决于系统和库实现。stderr也是如此,默认情况下,它总是行缓冲或无缓冲。
对该函数的调用等价于以_IOFBF为mode,以BUFSIZsize(当buffer不是空指针时)调用setvbuf,或者等价于以_IONBF为mode(当buffer是空指针时)调用它。

形参
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相关联,被设置为无缓冲的,因此后续的输出操作将尽快写入设备。
然而,一旦文件被关闭(关闭文件将刷新其缓冲区),缓冲流和无缓冲流的最终状态是相同的。
输出:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值