如何将std :: ostream重定向到c ++和linux中的文件或/ dev / null

时间:2013-02-13 02:25:58

标签: c++ c linux

我有一个c ++应用程序,其中包含大量std::cout。它运行在linux 2.6.x上。我需要测试应用程序的性能,所以我想将std::cout重定向到/dev/null。在C中,我可以简单地使用dup2。 c ++中是否有等价物将std::ostream重定向到文件或/dev/null

3 个答案:

答案 0 :(得分:5)

dup2技巧仍然适用于C ++,因为就像<stdio.h>一样,<iostream>只是UNIX系统调用的缓冲层。

您也可以通过从std::cout

断开缓冲区来在C ++级别执行此操作
std::cout.rdbuf( NULL );

除了切断std::cout与任何实际输出设备之间的关系外,还会设置std::ios::badbit标志,以防止发生任何输出转换(例如数字到文本)。性能应该比文件系统级别的黑客好得多。

答案 1 :(得分:3)

你可以在C ++中做同样的事情。 C和C ++都依赖IO的底层操作系统,重定向fd 1会影响std::cout,就像影响stdout一样。

(当然,对于测试,您可以在命令行上使用> /dev/null运行命令...)

答案 2 :(得分:0)

另一种方式是symlink your file to /dev/null

% ln -s /dev/null core
% ls -l core
lrwx-xr-x  1 john users 9 Nov 18 12:26 core -> /dev/null

为了真正测试你的程序速度,我建议注释掉你文件的写入并计算执行时间差,因为写入/ dev / null可能会有不同于写入普通文件的开销。