从 C++ 中的另一个程序重定向标准输出

2023-12-22

我正在编写单元测试,因此无法更改我正在测试的文件中的代码。我正在测试的代码在 cout 中有消息,我试图将其重定向到文件中以检查以确保程序输出正确的消息。有谁有办法在另一个程序中重定向标准输出而不会导致延迟?我尝试过 freopen() ,这导致我的程序由于某种原因挂起。


你可以创建一个filebuf然后替换cout带有它的streambuf:

{
  std::filebuf f;
  f.open("output.txt", std::ios::out);
  std::streambuf* o = std::cout.rdbuf(&f);
  std::cout << "hello" << std::endl;  // endl will flush the stream
  std::cout.rdbuf(o);
}

你需要恢复cout再次原始的streambuf(或将其设置为空指针),否则当全局流被刷新和销毁时它可能会崩溃,因为filebuf已经超出了范围。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 C++ 中的另一个程序重定向标准输出 的相关文章

随机推荐