c++ - 如何在 C++ 和 Linux 中将 std::ostream 重定向到文件或/dev/null

标签 c++ c linux

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

最佳答案

dup2技巧在 C++ 中仍然有效,因为就像 <stdio.h> , <iostream>只是 UNIX 系统调用之上的缓冲层。

您也可以在 C++ 级别通过断开缓冲区与 std::cout 的连接来执行此操作:

std::cout.rdbuf( NULL );

除了切断std::cout之间的关系和任何实际的输出设备,这将设置 std::ios::badbit防止任何输出转换(例如数字到文本)发生的标志。性能应该比使用文件系统级 hack 好得多。

关于c++ - 如何在 C++ 和 Linux 中将 std::ostream 重定向到文件或/dev/null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14845446/

相关文章:

c# - 禁用部分 SaveFileDialog

c - cmd参数语法错误

linux - 通过 bash 脚本检查服务是否正在运行

c - 声明一个输出为枚举的函数

c - 如何让数组知道是否有非数字输入或到达输入末尾?

linux - unixODBC/Postgres密码神秘登录错误

linux - 升级tomcat到7.0.054后日志仍然显示 "Starting Servlet Engine: Apache Tomcat/7.0.42"

c# - 是否可以在非托管 VC++ 应用程序中使用使用 C# 创建的 DLL?

c++ - Boost Beast 异步服务器因断言失败而失败:(id_!= T::id) 在多个 aync 调用中

c++ - 为什么要在 C++ 中将智能指针作为函数参数传递?