setbuf

来自cppreference.com
< c‎ | io
 
 
 
定义于头文件 <stdio.h>
void setbuf( FILE          *stream, char          *buffer );
(C99 前)
void setbuf( FILE *restrict stream, char *restrict buffer );
(C99 起)

设置内部缓冲区以用于流操作。它应该至少有BUFSIZ字符长。

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

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

目录

[编辑] 参数

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

[编辑] 返回值

无。

[编辑] 注意

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); // 无缓冲的stdout
    putchar('a'); // 'a'立即出现若stdout无缓冲
    thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // 休眠1秒
    putchar('b'); 
}

输出:

ab

[编辑] 参考

  • C11 standard (ISO/IEC 9899:2011):
  • 7.21.5.5 The setbuf function (p: 307-308)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.19.5.5 The setbuf function (p: 273)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.9.5.5 The setbuf function

[编辑] 参阅

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