他们之间有什么区别,他们是如何使用? 任何人都可以指点我的例子吗?什么是“cerr”和“stderr”?
具体来说,在这两种情况下你如何“写”流,以及如何恢复和输出(即屏幕)已写入的文本?
此外,“屏幕”输出本身是一个流权?也许我不太了解流。我知道这也可以保存到一个文件当然。所有这些会使用fprintf
/fscanf
等?
他们之间有什么区别,他们是如何使用? 任何人都可以指点我的例子吗?什么是“cerr”和“stderr”?
具体来说,在这两种情况下你如何“写”流,以及如何恢复和输出(即屏幕)已写入的文本?
此外,“屏幕”输出本身是一个流权?也许我不太了解流。我知道这也可以保存到一个文件当然。所有这些会使用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
尽管)。该片段将重定向标准输出和标准错误以转到位桶。
另一个区别在于标准错误不是缓冲(即每次写入时自动刷新),就是行缓存(在每个\ n上自动刷新),无论它是否指向交互式设备。相比之下,如果(并且仅在)它不涉及交互式设备,则标准输出会被完全缓冲。 – 2010-07-08 02:05:02
嗯,从技术上讲,这是stdrr和stderr(或者cout和cerr)之间的区别,而不是cerr和stderr :-) – paxdiablo 2010-07-08 03:52:29
它们有什么
stderr
之间的差别是FILE*
,标准C库的一部分。 cerr
是ostream
,是标准C++库的一部分。
此外,“屏幕”输出本身是一个 流正确吗?
是的。但实际上有两个默认写入屏幕的流:stdout
/cout
用于正常输出,而stderr
/cerr
用于出错消息。这对于重定向很有用:您可以将stdout
重定向到文件,但仍然在屏幕上显示错误消息。
是否可以从std :: ostream cerr对象获得FILE * stderr指针? (类似'cerr.rdbuf() - > bla') – alfC 2013-11-03 05:32:27
@alfC:没有一个标准的方法来做到这一点。请参阅http://stackoverflow.com/questions/109449/getting-a-file-from-a-stdfstream。 – dan04 2016-11-30 22:27:59
是的,我回答了http://stackoverflow.com/a/19749019/225186。我认为最优雅的答案是这样的:http://stackoverflow.com/a/33612982/225186 – alfC 2016-11-30 23:39:49
不需要道歉询问新手问题。 SO是用于所有技能水平的。 – paxdiablo 2010-07-08 01:43:27