它们之间有什么区别以及如何使用?
谁能指出我的例子?
具体来说,在这两种情况下,您如何“写入”流,以及如何恢复和输出(即在屏幕上)写入其中的文本?
另外,“屏幕”输出本身就是流吗?也许我不太了解流。我知道,这当然也可以保存到文件中。所有这些都将使用fprintf
/fscanf
等吗?
最佳答案
cerr
是C++流,而stderr
是C文件句柄,均代表标准错误输出。
您使用与写入其他流和文件句柄相同的方式写入它们:
cerr << "Urk!\n";
fprintf (stderr, "Urk!\n");
在这种情况下,我不确定您所说的“恢复”是什么意思,输出将达到标准错误,仅此而已。此后,该程序无意在乎它。如果您打算如何保存它以便以后在程序外部使用,请参阅下一段。
默认情况下,它们将转到您的终端,但是输出可以通过以下方式重定向到其他地方:
run_my_prog 2>error.out
而且,是的,“屏幕”输出是流(或文件句柄),但这通常仅是因为缺省情况下
stdout/cout
和stderr/cerr
连接到“屏幕”。重定向将影响此操作,在以下情况下,屏幕上将不会写入任何内容:run_my_prog >/dev/null 2>&1
(尽管如此,有些棘手的事情,例如直接写入
/dev/tty
)。该代码段会将标准输出和标准错误都重定向到位存储桶。