它们之间有什么区别以及如何使用?
谁能指出我的例子?

具体来说,在这两种情况下,您如何“写入”流,以及如何恢复和输出(即在屏幕上)写入其中的文本?

另外,“屏幕”输出本身就是流吗?也许我不太了解流。我知道,这当然也可以保存到文件中。所有这些都将使用fprintf/fscanf等吗?

最佳答案

cerr是C++流,而stderr是C文件句柄,均代表标准错误输出。

您使用与写入其他流和文件句柄相同的方式写入它们:

cerr << "Urk!\n";
fprintf (stderr, "Urk!\n");

在这种情况下,我不确定您所说的“恢复”是什么意思,输出将达到标准错误,仅此而已。此后,该程序无意在乎它。如果您打算如何保存它以便以后在程序外部使用,请参阅下一段。

默认情况下,它们将转到您的终端,但是输出可以通过以下方式重定向到其他地方:
run_my_prog 2>error.out

而且,是的,“屏幕”输出是流(或文件句柄),但这通常仅是因为缺省情况下stdout/coutstderr/cerr连接到“屏幕”。重定向将影响此操作,在以下情况下,屏幕上将不会写入任何内容:
run_my_prog >/dev/null 2>&1

(尽管如此,有些棘手的事情,例如直接写入/dev/tty)。该代码段会将标准输出和标准错误都重定向到位存储桶。

10-07 16:06