gpt4 book ai didi

c++ - 对 stdout 的默认缓冲区大小感到困惑

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:21 24 4
gpt4 key购买 nike

#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 上的标准输出是 unbuffered默认情况下?

cout<<stdout->_bufsiz在 ubuntu 上不工作,我怎样才能得到 stdout 的缓冲区大小?

当我替换 while(1); 时与 getchar(); , 1在windows和ubuntu上都会立即打印出来,为什么? getchar();刷新标准输出缓冲区?

谢谢。

最佳答案

问题是,你指的是哪个缓冲区?

  1. ostream 缓冲区?
  2. STDOUT文件描述符下文件流的缓冲区?
  3. 无论 STDOUT 恰好建立在什么设备上,它下面的缓冲区?

如果是 1,我认为你做的是正确的。

如果是 2,那你就不走运了。请在此处查看 setbuf() 的文档 http://man7.org/linux/man-pages/man3/setbuf.3.html据我所知,没有 getbuf 等价物。 (有人可以在这里纠正我吗?)

如果它是 3 那么我认为你真的不走运。

关于c++ - 对 stdout 的默认缓冲区大小感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23632340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com