#include<iostream>
using namespace std;
int main()
{
for(int i = 0 ; i < 10; i++)
{
printf("1 ");
}
while(1);
}
stdout
默认使用line buffered
吗?如果是这样,我们将在执行上述代码时在控制台上看不到10个1
。令我困惑的是:
在带有gcc的Windows系统上:立即打印1
。
在使用gcc的ubuntu系统上:不打印1
。
我使用cout<<stdout->_bufsiz
来检查Windows上的缓冲区大小,它是0
,这是否意味着默认情况下窗口上的标准输出是unbuffered
?
cout<<stdout->_bufsiz
无法在ubuntu上运行,如何获取stdout的缓冲区大小?
当我用while(1);
替换getchar();
时,会立即在Windows和ubuntu上打印1
,为什么? getchar();
刷新stdout缓冲区?
感谢。
答案 0 :(得分:2)
问题是,你的意思是哪个缓冲区?
如果是1,我认为你做的是正确的事。
如果是2,那么你运气不好。看到setbuf()的文档http://man7.org/linux/man-pages/man3/setbuf.3.html,据我所知,没有相同的getbuf。 (有人可以在这里纠正我吗?)
如果是3,那么我认为你真的不走运。
答案 1 :(得分:1)
在linux上,您可以执行以下操作来刷新缓冲区:
cout << "1 " << "\n";
或
cout << "1 " << flush;