我有一个包含很多的程序std::cerr
,它直接输出到我的终端。std::cerr
我想知道和之间有什么区别std::cout
。以及如何禁用std::cerr
(我不希望它输出到我的屏幕)?
5 回答
正如其他人所提到的,如果这是一个类 Unix 系统,那么 2>/dev/null 将 stderr (2) 重定向到天空中的大比特桶 (/dev/null)。
但是这里没有人解释 stderr 和 stdout 之间的区别是什么,所以我觉得至少有义务触及这个话题。
std::cout 是标准输出流。这通常是您的程序应该输出消息的地方。
std::cerr 是标准错误流。这通常用于错误消息。
因此,如果您的程序“包含大量 cerr”输出,那么可能值得看看为什么要打印这么多错误消息,而不是简单地隐藏消息。当然,这是假设您不只是碰巧有一个程序出于某种原因向 stderr 发出大量非错误输出。
这个旧的新闻组帖子显示了如何重定向。(代码太大,无法在此处发布)。你需要使用streambuf* rdbuf
.
cerr
ostream
是表示标准错误流的类对象。它与 cstdio 流相关联stderr
。
默认情况下,大多数系统将其标准错误输出设置为控制台,其中显示文本消息,尽管通常可以重定向。
因为cerr
它是 class 的一个对象ostream
,所以我们可以使用例如插入运算符 (ostream::operator<<) 将字符作为格式化数据写入它,或者使用 write 成员函数将字符作为未格式化数据写入其中(参见 ostream)。
假设此程序在 *nix 系统上执行,一种可能性是将 stderr 重定向到 /dev/null。
2>/dev/null 可以解决问题。再一次,我需要弥补 30 个字符。
在包括 Windows 和 Unix 在内的许多系统中,有两个标准输出流:stdout 和 stderr。
通常,程序输出到标准输出,可以显示在屏幕上,或重定向到文件:program > output.txt
或重定向为另一个程序的输入program1 | program2
。例如,您可以使用该grep
工具通过运行搜索程序的输出program | grep searchword
。
但是,如果发生错误,并且您将其打印到重定向的标准输出,用户将看不到它。这就是为什么会有第二个错误输出。此外,用户通常不希望将错误文本写入输出文件或馈送到 grep。
运行程序时,您可以将其错误输出重定向到带有program 2>file
. 该文件可以是 /dev/null 或&1
,这意味着重定向到标准输出。