它们之间有什么区别以及它们是如何使用的?谁能指出我的例子?
具体来说,在这两种情况下,您如何“写入”流,以及如何恢复和输出(即到屏幕)已写入其中的文本?
另外,“屏幕”输出本身就是一个流,对吗?也许我对流的理解不够好。当然,这也可以保存到文件中,我知道。所有这些都会使用fprintf
/fscanf
等吗?
它们之间有什么区别以及它们是如何使用的?谁能指出我的例子?
具体来说,在这两种情况下,您如何“写入”流,以及如何恢复和输出(即到屏幕)已写入其中的文本?
另外,“屏幕”输出本身就是一个流,对吗?也许我对流的理解不够好。当然,这也可以保存到文件中,我知道。所有这些都会使用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
(尽管有一些棘手的事情,比如直接写信)。该片段会将标准输出和标准错误重定向到位桶。
它们之间有什么区别
stderr
是一个FILE*
,并且是标准 C 库的一部分。 cerr
是ostream
标准 C++ 库的一部分。
另外,“屏幕”输出本身就是一个流,对吗?
是的。但实际上有两个流默认写入屏幕:stdout
/cout
用于正常输出,stderr
/cerr
用于错误消息。这对于重定向很有用:您可以重定向stdout
到文件,但屏幕上仍然显示错误消息。