我有一个c ++应用程序,其中包含大量std::cout
。它运行在linux 2.6.x上。我需要测试应用程序的性能,所以我想将std::cout
重定向到/dev/null
。在C中,我可以简单地使用dup2
。 c ++中是否有等价物将std::ostream
重定向到文件或/dev/null
?
答案 0 :(得分:5)
dup2
技巧仍然适用于C ++,因为就像<stdio.h>
一样,<iostream>
只是UNIX系统调用的缓冲层。
您也可以通过从std::cout
:
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可能会有不同于写入普通文件的开销。