setbuf

来自cppreference.com
< c‎ | io
 
 
 
在标头 <stdio.h> 定义
void setbuf(FILE          *stream, char          *buffer );
(C99 前)
void setbuf(FILE*restrict stream, char*restrict buffer );
(C99 起)
#define BUFSIZ     /* 未指明 */

设置用于流操作的内部缓冲区。其长度至少应该为 BUFSIZ 个字符。

buffer 非空,则等价于 setvbuf(stream, buffer, _IOFBF, BUFSIZ)

buffer 为空,则等价于 setvbuf(stream, NULL, _IONBF, 0) ,这会关闭缓冲。

目录

[编辑]参数

stream - 要设置缓冲区的文件流
buffer - 指向文件流所用的缓冲区的指针。若提供空指针,则关闭缓冲。

[编辑]返回值

无。

[编辑]注解

BUFSIZ 不是适合的缓冲区大小,则能用 setvbuf 更改它。

setvbuf 亦应当用于检测错误,因为 setbuf 不指示成功或失败。

此函数仅可在已将 stream 关联到打开的文件后,但要在任何其他操作(除了对 setbuf/setvbuf 的失败调用)前使用。

一个常见错误是设置 stdin 或 stdout 的缓冲区为生存期在程序终止前结束的数组:

int main(void){char buf[BUFSIZ]; setbuf(stdin, buf);}// buf 的生存期结束,未定义行为

[编辑]示例

setbuf 可用于禁用流上的缓冲,以要求其立即输出。

#include <stdio.h>#include <threads.h>   int main(void){ setbuf(stdout, NULL);// 无缓冲的 stdoutputchar('a');// 若 stdout 无缓冲,则 'a' 立即出现thrd_sleep(&(struct timespec){.tv_sec=1}, NULL);// 休眠 1 秒putchar('b');}

输出:

ab

[编辑]引用

  • C17 标准(ISO/IEC 9899:2018):
  • 7.21.5.5 The setbuf function (第 225 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.21.5.5 The setbuf function (第 307-308 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.19.5.5 The setbuf function (第 273 页)
  • C89/C90 标准(ISO/IEC 9899:1990):
  • 4.9.5.5 The setbuf function

[编辑]参阅

为文件流设置缓冲区和其大小
(函数)[编辑]
setbuf 的 C++ 文档
close