【发布时间】:2014-05-13 13:15:24
【问题描述】:
#include<iostream>
using namespace std;
int main()
{
for(int i = 0 ; i < 10; i++)
{
printf("1 ");
}
while(1);
}
stdout 默认使用line buffered 吗?如果是这样,当执行上面的代码时,我们将不会在控制台上看到十个1。让我困惑的是:
在带有 gcc 的 windows 系统上:1 会立即打印出来。
在带有 gcc 的 ubuntu 系统上:1 未打印。
我用cout<<stdout->_bufsiz检查windows上的缓冲区大小,是0,是不是意味着windows上的stdout默认是unbuffered?
cout<<stdout->_bufsiz 在 ubuntu 上不工作,如何获取 stdout 的缓冲区大小?
当我用getchar(); 替换while(1); 时,1 会立即在 windows 和 ubuntu 上打印,为什么? getchar(); 刷新标准输出缓冲区?
谢谢。
【问题讨论】:
-
变量
stdout与std::cout无关。stdout变量被printf等旧 C 函数使用,而 C++ 流使用它们自己的缓冲区。无法获取 C++ 流使用的底层basic_streambuf的缓冲区大小。 -
我把
cin换成printf,还是一样的问题。 @JoachimPileborg