如何禁用std :: cerr?

时间:2011-08-18 16:37:06

标签: c++ console iostream standard-error

我有一个包含大量std::cerr的程序,它直接输出到我的终端。我想知道std::cerrstd::cout之间有什么区别。如何禁用std::cerr(我不希望它输出到我的屏幕)?

5 个答案:

答案 0 :(得分:5)

正如其他人所提到的,如果这是一个类Unix系统,那么2> / dev / null会将stderr(2)重定向到天空中的大位桶(/ dev / null)。

但是这里没有人解释stderr和stdout之间的区别是什么,所以我觉得至少有必要触及这个话题。

std :: cout是标准输出流。这通常是您的程序应该输出消息的地方。

std :: cerr是标准错误流。这通常用于错误消息。

因此,如果您的程序“包含大量的cerr”输出,那么可能值得一看为什么正在打印这么多错误消息,而不是简单地隐藏消息。当然,这假设您不会碰巧有一个程序由于某种原因向stderr发出大量非错误输出。

答案 1 :(得分:0)

这篇旧的新闻组帖子展示了如何redirect(代码太大,无法在此处发布)。您需要使用streambuf* rdbuf

cerr是类ostream的对象,表示标准错误流。它与cstdio流stderr关联。

默认情况下,大多数系统都将其标准错误输出设置为控制台,其中显示了文本消息,但通常可以重定向。

因为cerr是类ostream的对象,我们可以使用例如插入运算符(ostream :: operator<<)作为格式化数据或使用无格式数据将字符写入其中写成员函数等(参见ostream)。

答案 2 :(得分:0)

假设此程序在* nix系统上执行,一种可能性是将stderr重定向到/ dev / null。

答案 3 :(得分:0)

2> / dev / null可以解决问题。我需要再次组成30个字符。

答案 4 :(得分:0)

在许多系统中,包括Windows和Unix,有两个standard output streams:stdout和stderr。

通常,程序输出到stdout,可以在屏幕上显示,也可以重定向到文件:program > output.txt或重定向为另一个程序program1 | program2的输入。例如,您可以运行grep,使用program | grep searchword工具搜索程序的输出。

但是,如果发生错误,并将其打印到重定向的stdout,则用户将看不到它。这就是出现错误的第二个输出的原因。此外,用户通常不希望将错误文本写入输出文件,或者将其提供给grep。

运行程序时,可以将其错误输出重定向到program 2>file的文件。该文件可以是/ dev / null,或&1,这意味着重定向到stdout。