【发布时间】:2011-10-24 13:50:29
【问题描述】:
我想关闭标准输出的缓冲以获得以下代码的准确结果
while(1) {
printf(".");
sleep(1);
}
代码 printf 一堆 '.'仅当缓冲区被填满时。
【问题讨论】:
-
StackOverflow 上被问得最多的问题的候选人。
标签: c
我想关闭标准输出的缓冲以获得以下代码的准确结果
while(1) {
printf(".");
sleep(1);
}
代码 printf 一堆 '.'仅当缓冲区被填满时。
【问题讨论】:
标签: c
【讨论】:
setbuf(stream, NULL); 等价于setvbuf(stream, NULL, _IONBF, BUFSIZ);
setbuf 或setvbuf 作为流的第一个 操作是唯一合法的。因此,明确地使用fflush 通常是一个更好的主意。
你也可以使用 setbuf
setbuf(stdout, NULL);
这将解决所有问题
【讨论】:
Both ANSI C and the System V Interface Definition (Issue 2) require <<setbuf>>. However, they differ on the meaning of a <<NULL>> buffer pointer: the SVID issue 2 specification says that a <<NULL>> buffer pointer requests unbuffered output. For maximum portability, avoid <<NULL>> buffer pointers.
setbuf() 声明:“setvbuf(stream, buf, _IONBF, BUFSIZ) 如果 buf 是空指针。” _IONBF means unbufferedPOSIX 7 和the C standard 都同意,并且已经同意decades。
使用fflush(FILE *stream) 和stdout 作为参数。
【讨论】:
你可以这样做:
write(1, ".", 1);
而不是这个:
printf(".");
【讨论】:
STDOUT_FILENO
使用fflush(stdout)。您可以在每次调用 printf 后使用它来强制刷新缓冲区。
【讨论】: