unix c语言 标准输出重定向,重定向标准输出/标准错误到UNIX下的C++文件 - 再次

重定向输出和错误从内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 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值