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

标签 c io redirect stdout

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

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

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

最佳答案

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

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

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

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

关于c - 如何将标准输出重定向回终端窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055002/

相关文章:

c - 在c中打开并写入文本

Node.js 和 haproxy

php - htaccess 资源被解释为样式表但以 MIME 类型 text/html 传输

c - 如何使用 C 中的初等变换计算非奇异矩阵 (n*n) 的行列式?

c - 什么是c中的数组衰减以及它何时发生?

haskell - 将 Kleisli 箭头提升到 IO?

php - Laravel4 POST 无法解释的重定向到 GET

c - 如何优化缓存性能?

c - 了解 xdg-open 的可用性

C++ 字符串格式化,如 Python "{}".format