将 cout 切换回写入屏幕

问题描述

在我的程序中,我将 cout 切换为使用以下命令写入文件

int newstdout = open("myFile.txt",O_WRONLY|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO);    
close(1);    
dup(newstdout);    
close(newstdout);

稍后我将如何在程序中切换回我的 cout 打印到屏幕(终端)?

解决方法

使 cout(或任何其他流)输出到不同目标的正确方法是调用其 rdbuf() 方法以交换不同的流缓冲区。如果需要,您可以稍后换回旧缓冲区。例如:

#include <iostream>
#include <fstream>

std::ofstream outfile("myFile.txt");
auto cout_buff = std::cout.rdbuf();

std::cout.rdbuf(outfile.rdbuf());
// anything written to std::cout will now go to myFile.txt instead...

std::cout.rdbuf(cout_buff);
// anything written to std::cout will now go to STDOUT again...