【问题标题】:How to redirect stdout back to the terminal window如何将标准输出重定向回终端窗口
【发布时间】:2011-02-20 03:14:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: c io redirect stdout


    【解决方案1】:

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

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

    不过,让写入文件的代码采用文件流参数会更好(因为更简单),这样您就不必依赖重定向和重新重定向标准输出。

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

    【讨论】:

      【解决方案2】:

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

      如果您的意思是所有输出都同时显示到屏幕和文件中,那么请查看 tee(1) 命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-11
        • 1970-01-01
        • 2020-10-01
        • 2021-01-27
        • 2015-02-11
        相关资源
        最近更新 更多