gpt4 book ai didi

c++ - 换行符是否也刷新缓冲区?

转载 作者:可可西里 更新时间:2023-11-01 18:26:12 28 4
gpt4 key购买 nike

我知道像 endl\n 之类的问题已经在 SO 上得到了多次回答。但他们只提到 endl 能够将缓冲区刷新到 stdout 上,而 \n 则不能。

因此,我对刷新缓冲区的理解是,给定的输入存储在缓冲区中,并且仅在遇到 endl 时才传递到 stdout ,或一些明确的 flush 函数。如果是这样,我希望以下代码:

#include <iostream>
#include <unistd.h>

int main(void)
{
std::cout << "Hello\nworld";
sleep(2);
std::cout << std::endl;

return 0;
}

显示:

2 秒后

Hello
World

但实际输出是:

Hello

2 秒后

World

为什么会这样?

不应该 \n 也存储在缓冲区中,只有当遇到 endl 时,缓冲区才会被刷新/显示到 stdout,但据我观察,\n 的行为方式与 endl 相同。

最佳答案

将评论转化为答案。

这取决于 cout 的去向。如果它进入终端(“交互式设备”),那么它就不能被完全缓冲——它通常是行缓冲的,这意味着字符在打印换行符后出现,或者理论上可以是无缓冲的。如果它要到达管道或文件或其他非交互式目标,即使流已完全缓冲,endl 也会强制输出数据,这通常是这样。

I also wanted to know if I provided neither new line character nor endl, will the output be displayed on the stdout once it reaches the end of the program, I know it does for terminal, but is it applicable to all types of stdout?

是的,当文件流在程序的(正常)结束时关闭时,挂起的输出将被刷新。当缓冲区已满时,它也会被刷新。如果程序中止,挂起的输出通常不会被刷新。

关于c++ - 换行符是否也刷新缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42430701/

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