如何将标准输出重定向回终端窗口

3
我需要重定向一些通常会打印到屏幕上的输出到文件中。 我已经能够将输出重定向到文件,但似乎无法将程序其余部分的输出重新定向回终端窗口。
所有代码都是用C编写的。程序正在Ubuntu上运行。
有什么想法可以解决这个问题吗?
2个回答

5
我假设您的标准输出未重定向。然后,您关闭原始标准输出并重新打开它以将标准输出发送到文件 - 可能使用freopen()。当您完成写入文件时,您希望重新连接标准输出到终端。
如果是这样,您可能需要使用freopen()打开/dev/tty文件。请注意,这不是完全可靠的;如果程序在没有终端的情况下运行(例如,如果它从cron作业运行),打开/dev/tty将失败。
然而,最好(更简单)的方法是让写入文件的代码接受文件流参数,这样您就不必依赖于重定向和重新重定向标准输出。
如果您正在使用文件描述符,则可以在进行初始重定向到文件之前对标准输出文件描述符使用dup()。然后,在关闭重定向的标准输出之后,您可以再次使用dup()将原始标准输出重新连接到原始文件描述符。

1

嗯,你听起来像是在描述一种输出的混合方式,一些输出到屏幕,一些输出到文件。如果是这样,你需要获取另一个文件描述符并使用它来写入其中之一。文件描述符不能指向多个目标。

如果你偶然想让所有输出都同时显示在屏幕和文件中,请查看tee(1)命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接