【发布时间】:2017-10-13 11:17:21
【问题描述】:
在控制台应用程序中,我正在调用一个库函数,该函数输出一些我不感兴趣的消息(可能使用 printf):
void libFoo()
{
// does some stuff
printf("boring message");
// does some more stuff
}
我尝试抑制 cout 之前不起作用,因此我认为 libFoo 正在使用 printf:
cout << "interesting messsage" << endl;
streambuf* orig_buf = cout.rdbuf();
cout.rdbuf(NULL);
libFoo();
cout.rdbuf(orig_buf);
cout << "another interesting messsage" << endl;
此代码输出所有这些消息。有没有办法暂时抑制 printf 的输出?我正在使用 Linux Mint。
【问题讨论】:
-
你可以,但我认为你不能完全便携。查看 freopen 和 dup 函数。
-
记住 cout 是缓冲的,而 cerr 不是。如果您禁用某些东西,请确保缓冲区已刷新。
-
也许你的库正在使用日志功能,而不是专门
printf...如果存在这种可能性,请考虑弄清楚如何设置日志级别... -
“无聊的消息”可能会显示在
stderr而不是stdout。 -
我认为唯一定义的方法是将
stdout重定向到其他地方,例如/dev/null,然后再恢复它。