【发布时间】:2020-12-18 10:01:26
【问题描述】:
我有一段代码以ostream 作为输入,可以是std::cout 或std::sstream 并输出到它。
void myFunction(std::ostream out)
{
out << "output";
}
同时我想禁止任何第三方库使用printf,这样他们就不会干扰我的输出,以防out == std::cout。我可以通过使用freopen 将stdout 重定向到NUL 来实现这一点,但这会阻止我的代码正确打印到std::out。
有没有办法只重定向printf,同时保持std::cout 正常工作?
我目前的解决方案如下,但函数不再与 out 的类型无关。
void myFunction(std::ostream out)
{
unlockStdout(); // redirect stdout to the original stdout
out << "output";
lockStdout(); // redirect stdout to NUL
}
【问题讨论】:
-
你为什么不把
dup2()STDOUT_FILENO放到你用来做你的东西的iostream,然后重新打开stdout到/dev/null? -
恐怕没有仅使用标准 C++ 库的可移植方式。所以最好的确实是 EOF 建议。
-
@EOF 你能提供一个如何
dup2到iostream 的例子吗?
标签: c++