如何将stdout重定向回终端窗口

时间:2011-02-20 03:14:20

标签: c io redirect stdout

我需要将通常打印到屏幕的一些输出重定向到文件中。 我已经能够将输出重定向到文件,但我似乎无法弄清楚如何将我的程序的其余部分的输出指回到终端窗口。

所有代码都在C中。程序在Ubuntu上运行。

有关需要做什么的任何见解?

2 个答案:

答案 0 :(得分:5)

我假设你从未经重定向的标准输出开始。然后关闭原始标准输出并重新打开它以将标准输出发送到文件 - 可能使用freopen()。完成对文件的写入后,您需要将标准输出重新连接到终端。

如果这是正确的,您可能需要使用freopen()打开/dev/tty文件。请注意,这并不完全可靠;如果程序在没有终端的情况下运行(例如,如果它是从cron作业运行的话),则打开/dev/tty将失败。

然而,更好(如更简单),使写入文件的代码采用文件流参数,这样您就不必依赖重定向和重定向标准输出。

如果您正在使用文件描述符,则可以在执行初始重定向到文件之前在标准输出文件描述符上使用dup()。然后,您可以在关闭重定向的标准输出后再次使用dup()将原始标准输出重新连接回原始文件描述符。

答案 1 :(得分:1)

嗯,你听起来像是在描述输出的混合,有些是屏幕,有些是文件。如果是这样,您将需要获取另一个文件描述符并使用它来编写一个或另一个。文件描述符不能指向多个目标。

关闭概率你的意思是所有输出都转到屏幕和文件,然后查看 tee(1)命令。