我有一个运行无限循环的程序,在收到CTRL+C
信号之前不会终止。我想要做的是将这个程序的输出重定向到一个文件中,log
例如。但是,在我CTRL+C
编写程序后,没有任何内容记录到log
. 我认为这可能是一些与 I/O 缓冲区相关的问题,但不知道如何解决。我在正确的轨道上吗?如何将无限循环程序的输出转储到文件中?
如果您的程序使用标准输出函数(例如puts
,printf
和来自stdio.h
C、cout << …
C++、print
许多高级语言的朋友),那么它的输出是缓冲的:字符在称为缓冲区的内存区域中累积;当缓冲区中有太多数据时,缓冲区的内容将被打印(它被“刷新”)并且缓冲区变空(准备再次填充)。如果您的程序没有产生太多输出,则它可能尚未填满其缓冲区。
当你用Ctrl+杀死你的程序时C,除非你为SIGINT设置了一个信号处理程序,否则它就会死掉。任何未刷新缓冲区的内容都将丢失。
你有三种可能:
fflush(stdout)
,或fflush(NULL)
刷新所有缓冲区)。setvbuf(stdout, NULL, _IONBF, 0)
。(参见C 等效的自动刷新(每次写入后刷新标准输出)?)