重定向输出和错误从内C++
到一个或多个文件是什么,为什么我需要它
我正在使用一个外部的,预编译的第三方库,产生一个荒谬的输出量,我想重定向到一个日志文件以保持控制台清洁。
条件
兼容性是没有问题的,代码将只在Unix系统上运行。重定向不仅应该影响C++样式的打印(std :: cout <
我已经试过到目前为止
我一直在计算器上浏览了半天,读取多个答案具有类似问题的人。有了这些答案的帮助下,我已经能够总结了以下的一段代码:
#include
#include
#include
#include "unistd.h"
const int stdoutfd(dup(fileno(stdout)));
int redirect_stdout(const char* fname){
fflush(stdout);
int newstdout = open(fname, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
dup2(newstdout, fileno(stdout));
close(newstdout);
}
int restore_stdout(){
fflush(stdout);
dup2(stdoutfd, fileno(stdout));
close(stdoutfd);
return stdoutfd;
}
int main(){
redirect_stdout("/dev/null");
std::cout << "invisible 1" << std::endl;
restore_stdout();
std::cout << "visible 1" << std::endl;
redirect_stdout("/dev/null");
std::cout << "invisible 2" << std::endl;
restore_stdout();
std::cout << "visible 2" << std::endl;
return 0;
}
我希望看到:
visible 1
visible 2
我其实见
visible 1
也就是说,当使用这个机制第一次,它的工作原理 - 但如果再次使用,恢复输出将无法正常工作。 有人可以指出我需要改变什么以使机制无限地工作吗?
2013-08-06
carsten
+0
可能重复:http://stackoverflow.com/questions/4810516/c-redirecting-stdout –