将函数输出重定向到/ dev / null

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (60)

我正在使用正在向cout或打印警告消息的库cerr。我不希望这个警告消息到达我的程序的输出。我怎样才能捕捉到这个输出并将其输入/dev/null或类似?

MWE:

#include <iostream>

void foo()
{
    std::cout << "Boring message. " << std::endl;
};

int main()
{
    foo();
    std::cout << "Interesting message." << std::endl;
    return 0;
}

输出应该是:

Interesting message.

我应该如何修改main以获得所需的输出?(foo绝对不能改变)

提问于
用户回答回答于

如果你确定这个东西没有重定向输出(例如/dev/tty/,这将再次标准化)(我不认为),你可以在调用它们之前重定向。

#include <iostream>
#include <sstream>

void foobar() { std::cout << "foobar!\nfrob!!"; }

int main () {    
    using namespace std;

    streambuf *old = cout.rdbuf(); // <-- save        
    stringstream ss;

    cout.rdbuf (ss.rdbuf());       // <-- redirect
    foobar();                      // <-- call
    cout.rdbuf (old);              // <-- restore

    // test
    cout << "[[" << ss.str() << "]]" << endl;
}
用户回答回答于

我可以建议一个hack?在使用库函数之前,在相关流上设置错误/失败位。

#include <iostream>

void foo()
{
    std::cout << "Boring message. " << std::endl;
}

int main()
{
    std::cout.setstate(std::ios::failbit) ;
    foo();
    std::cout.clear() ;
    std::cout << "Interesting message." << std::endl;
    return 0;
}

所属标签

可能回答问题的人

  • o o

    4 粉丝495 提问5 回答
  • 应用案例分享

    1 粉丝490 提问5 回答
  • uncle_light

    5 粉丝518 提问4 回答
  • 学生

    8 粉丝476 提问3 回答

扫码关注云+社区

领取腾讯云代金券