如何暂时禁止printf的输出?

时间:2017-10-13 11:17:22

标签: c++ linux

在控制台应用程序中,我调用的是一个库函数,它输出一些我不感兴趣的消息(可能使用printf):

cout << "interesting messsage" << endl;
streambuf* orig_buf = cout.rdbuf();
cout.rdbuf(NULL);
libFoo();
cout.rdbuf(orig_buf);
cout << "another interesting messsage" << endl;

我试图压制cout之前没有工作,因此我认为libFoo使用的是printf:

mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation)

此代码输出所有这些消息。有没有办法暂时抑制printf的输出?我正在使用Linux Mint。

1 个答案:

答案 0 :(得分:1)

这是:

int supress_stdout() {
  fflush(stdout);

  int ret = dup(1);
  int nullfd = open("/dev/null", O_WRONLY);
  // check nullfd for error omitted
  dup2(nullfd, 1);
  close(nullfd);

  return ret;
}

void resume_stdout(int fd) {
  fflush(stdout);
  dup2(fd, 1);
  close(fd);
}

如果这是C ++,那么也可以使用cout来进行测量。

已编辑为

您传递给fd的{​​{1}}与您收到的resume_stdout返回值相同。