【发布时间】:2014-06-11 11:57:45
【问题描述】:
我已经开始学习 C 编程,所以我是初学者,在学习标准文本流时,我想出了“stdout”流被缓冲而“stderr”流没有被缓冲,但我没有能够理解这一行。
我已经在这个论坛上阅读过关于“缓冲区”的内容,并且我喜欢糖果类比,但是当有人说:“这个流被缓冲而另一个没有被缓冲时,我无法弄清楚是什么意思。 "什么效果?
有什么区别?
更新:会影响处理速度吗?
【问题讨论】:
-
将
stdout视为运输线卡车。你开始把箱子装进领头卡车。当卡车已满时或有人按喇叭并说“Ship It!”时,您将其发送出去。卡车离开,下一辆卡车停在装卸码头,过程继续进行。现在将stderr想象成一排自行车,每辆都有一个可以容纳一个 盒子的架子。每次您将一个箱子扔出去运送时,骑手拿走它,然后立即离开(因为只能拿一个)。这几乎概括了它。是的,您可以想象,一千辆自行车的效率远低于十辆卡车。 -
@WhozCraig,比一个答案,我会赞成。很好的比喻。
-
@WhozCraig 这是一个非常贴切和有用的类比,尤其是
And yes, as you can imagine, a thousand bikes is far less efficient than ten trucks.这个评论值得回答:) -
@ajay 我真的很喜欢(并且点赞)你和 Paul 的回答。我特别喜欢您的回答中对 gcc 的三种缓冲区方法的摘要描述以及 Paul 的简洁性。我的评论更多的是尝试将代码与概念分离,并且由于我不清楚这就是 OP 正在寻找的东西,所以觉得它适合这里而不是那里。无论如何,谢谢你的道具!