【发布时间】:2011-02-20 03:14:20
【问题描述】:
我需要将一些通常打印到屏幕上的输出重定向到一个文件中。 我已经能够将输出重定向到文件,但我似乎无法弄清楚如何将程序其余部分的输出引导回终端窗口。
所有代码都在 C 中。程序在 Ubuntu 上运行。
关于需要做什么的任何见解?
【问题讨论】:
我需要将一些通常打印到屏幕上的输出重定向到一个文件中。 我已经能够将输出重定向到文件,但我似乎无法弄清楚如何将程序其余部分的输出引导回终端窗口。
所有代码都在 C 中。程序在 Ubuntu 上运行。
关于需要做什么的任何见解?
【问题讨论】:
我假设您从未重定向的标准输出开始。然后您关闭原始标准输出并重新打开它以将标准输出发送到文件 - 可能使用freopen()。当您完成对文件的写入后,您希望将标准输出重新连接到终端。
如果正确,您可能需要使用freopen() 打开/dev/tty 文件。请注意,这并不完全可靠;如果程序在没有终端的情况下运行(例如,如果它从 cron 作业运行),则打开 /dev/tty 将失败。
不过,让写入文件的代码采用文件流参数会更好(因为更简单),这样您就不必依赖重定向和重新重定向标准输出。
如果您正在使用文件描述符,您可以在初始重定向到文件之前在标准输出文件描述符上使用dup()。然后,您可以在关闭重定向的标准输出后再次使用dup() 将原始标准输出重新连接回原始文件描述符。
【讨论】:
好吧,您听起来像是在描述混合输出,一些用于屏幕,一些用于文件。如果是这样,您将需要获取另一个文件描述符并使用它来编写一个或另一个。一个文件描述符不能指向多个目的地。
如果您的意思是所有输出都同时显示到屏幕和文件中,那么请查看 tee(1) 命令。
【讨论】: