【问题标题】:Is is possible to log everything that is printed to the terminal into a text file in C?是否可以将打印到终端的所有内容记录到 C 中的文本文件中?
【发布时间】:2012-08-31 22:43:01
【问题描述】:

我有大量的 printf 语句,我想将它们全部写入一个文本文件。我意识到我可以在每个语句之后添加 fprintf 语句,但有没有更好的方法,比如函数,或者我应该只编写自己的函数?我觉得这可能是一个标准程序,我只是不知道它叫什么,所以通过谷歌搜索很难找到答案。

编辑: 为清楚起见,我希望输出能像往常一样在终端中继续运行,但也可以同时打印到文件中。有几个人建议使用 bash 命令。什么时候应该执行?程序运行后?

【问题讨论】:

  • @Mysticial 所说的 - 如果你碰巧使用 X-windows - xterm 有一个功能(自 Matrix 电影以来默认情况下未启用)来执行此操作
  • 我目前正在使用 linux 但感谢您的建议。

标签: c terminal printf


【解决方案1】:

您可以这样做:./executable > outputfile 2>&1./executable &> outputfile

这将使您能够将标准输出和标准输出重定向到outputfile

【讨论】:

  • 我相信这实际上是标准输出和标准错误,至少我认为是这样。 1 是 STDOUT 2 是 STDERR。
  • 特别是 support.microsoft.com/kb/110930 所以 2> 重定向 STDERR,而 > 重定向 STDOUT,所以使用 2>&1 将 STDERR 重定向到 STDOUT 流中。我相信
  • 这在普通 shell 中也可以工作吗? (我只在 MSDOS 中使用过)。
  • 感谢您的回复。根据大家的建议,我找到了this,这很有帮助。如果我错了,请纠正我,但也许我需要这样做: ./executable &>outputfile ?
  • @onaclov2000:你说得对,这是一个错误,它是标准输出而不是标准输入。答案也更新为&> 重定向。
【解决方案2】:

如何将标准输出重定向到一个文件,比如

int main ()
{
  freopen ("myfile.txt","w",stdout);
  printf ("This sentence is redirected to a file.");
  fclose (stdout);
  return 0;
}

代码示例来自freopen的c++参考​​p>

【讨论】:

  • 感谢您的回复。您的建议效果很好,但我实际上希望输出同时打印到终端和文件。好像freopen不能做到这一点,但我可能弄错了?
【解决方案3】:

如果您使用的是 UNIX 类型框,则可以通过 tee 管道输出,这会将其传送到标准输出一个文件:

myProg | tee /tmp/myProg.out

还有一些方法可以用标准错误做同样的事情:

( myProg 2>&1) | tee /tmp/myProg.out_and_err

这当然取决于您使用的任何外壳,但应该适用于最常见的外壳。

【讨论】:

  • 您好,感谢您的回复。对不起我的无知,但这是一个 bash 命令吗?如果有,什么时候调用?
  • @whats,是的。我的意思是 tee 是一个 Unix 可执行文件,但你调用它的方式是使用 bash 管道和重定向的东西。它将在 Linux 上运行良好。在我有 myProg 的地方,你当然应该使用你自己的程序/脚本的名称。
【解决方案4】:

程序运行时,使用> bash 运算符将程序输出重定向到文本文件:

IE

myprogram > myfile.txt

这会将通常使用printf 输出到屏幕的所有内容保存到名为 myfile.txt 的文件中。

【讨论】:

  • 您好,感谢您的回复。抱歉,如果这很明显,但是应该将其放在代码中的哪个位置?我还找到了this 页面。这和你说的一样吗?
  • 它是一个 bash 运算符。那个页面正是我所说的。
猜你喜欢
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多