gpt4 book ai didi

c - C中的stdout和stderr有什么区别?

转载 作者:行者123 更新时间:2023-12-04 00:59:27 25 4
gpt4 key购买 nike

在 C 中,stdoutstderr 默认都打印到控制台窗口。除了缓冲级别之外,stderrstdout 之间还有什么区别吗?

最佳答案

stdoutstderr 之间的区别之一是缓冲级别。在 §7.21.3 Files ¶7 中,C11 标准说:

At program startup, three text streams are predefined and need not be opened explicitly -- standard input (for reading conventional input), standard output (for writing conventional output), and standard error (for writing diagnostic output). As initially opened, the standard error stream is not fully buffered; the standard input and standard output streams are fully buffered if and only if the stream can be determined not to refer to an interactive device.



通常,这意味着标准输出是行缓冲的(因此在打印换行符或缓冲区已满时刷新数据),而标准错误是行缓冲或未缓冲的。当然,这些特征是可以改变的。

标准错误流的目的是将错误消息与常规输出分开。这在诸如 shell 脚本之类的上下文中很重要,其中标准输出可能被发送到管道或文件。该重定向使标准错误仍然转到不同的地方——通常是终端。您也可以将标准输出与标准错误分开捕获,至少在 shell 足够强大的情况下。
 program > file
program | filter
program 2> error.log | filter
program > file 2> error.log
program 2> error.log

前两个使错误消息在终端上可见。最后三个捕获文件 error.log 中的错误消息——分别将标准输出发送到 filter 程序、 file 或终端窗口。

通过将错误消息与标准输出分开,管道中的程序(在我的示例中为 filter )不必解释来自 program 的错误消息,这使它们变得更加简单。

关于c - C中的stdout和stderr有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59799454/

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