如何重定向无限循环程序的输出

如何重定向无限循环程序的输出

我有一个程序正在运行无限循环,直到收到信号才会终止CTRL+C。我想要做的是将该程序的输出重定向到文件中,例如log。但是,在我CTRL+C编辑程序之后,没有任何内容被记录到log。我认为这可能是与 I/O 缓冲区相关的一些问题,但不知道如何解决。我走在正确的轨道上吗?如何将无限循环程序的输出转储到文件中?

答案1

如果你的程序使用标准输出函数(例如puts,以及C、C++ 和许多高级语言中printf的函数),那么它的输出是stdio.hcout << …print缓冲的:字符会累积在称为缓冲区的内存区域中;当缓冲区中的数据过多时,会打印缓冲区的内容(即“刷新”),缓冲区将变空(准备再次填充)。如果您的程序没有产生太多输出,则可能是因为缓冲区尚未填满。

Ctrl当你使用+终止程序时C,除非你已设置信号处理程序信号情报,它就死掉了。所有未刷新的缓冲区的内容都会丢失。

您有三种可能:

答案2

脚本(无论是否无限循环)应逐渐保存重定向的数据,因此脚本的性质不应影响结果。数据应逐渐写入...

或者(如果根本没有输出,甚至没有重定向)您可能想要尝试fflush(stdout)或采取类似措施。

只是一个想法(虽然可能性很小)...你确定重定向STDOUT是你应该做的吗?难道不是吗STDERR?尝试使用以下命令运行二进制文件/脚本/...:

$ ./program 2> ./stderr_out

然后cat ./stderr_out确保STDERR不是那个...

相关内容