0

我想把我的程序的输出放到一个文件中。我键入以下内容:

./prog > log 2>&1

但是文件"log"中没有任何内容。我使用的是 Ubuntu 11.10,默认 shell 是 bash。

任何人都知道这个的原因以及我如何调试它?

4

1 回答 1

3

有很多可能的原因:

  • log当您尝试使用截断重定向到文件时,程序会从文件中读取输入(请参阅为什么“排序文件 1 > 文件 1”不起作用?
  • 输出被缓冲,因此在刷新输出缓冲区之前您看不到文件中的数据。如果使用 C++ I/O 流等,您可以手动调用fflush或输出。std::flush
  • 该程序足够聪明,如果输出流不是终端,则禁用输出。
  • 您查看了错误的文件(即在另一个目录中)。
  • 您尝试错误地转储文件的内容。
  • 您的程序输出 '\0' 作为第一个字符,因此即使有一些数据,输出也会显示为空。
  • 自己命名。

最好的办法是在调试器(如gdb)下运行此应用程序或使用straceptrace(或两者)并查看程序在做什么。我的意思是,真的,输出重定向在过去的 40 年里一直有效,所以问题一定出在其他地方。

于 2011-11-04T02:44:42.393 回答