我们在编写控制台程序时,经常会使用“ printf ”指令打印输出到屏幕,并且使用重定位符号 “>” 输出到文件。
微软这么定义控制台程序的输出:“屏幕缓冲区是一个在控制台窗口中输出的二维字符和颜色数据数组。 一个控制台可以有多个屏幕缓冲区。 活动屏幕缓冲区是指屏幕上所显示的缓冲区。系统在创建新控制台时就会创建一个屏幕缓冲区”。
在windows10下,这个缓冲区的长度最大为9999行。也就是输出窗口最多保存9999行内容,再来新的内容,旧的内容就会被挤出去。
有时我们需要打印输出大于9999行内容,又希望能检索到9999行之前的内容,这时就需要能写入到文件中。简单的办法是使用重定向符号,例如 “myapp >> 1.txt”。
但我们又希望能够在屏幕上同步观察怎么办?在linux系统下,可以使用tee将软件打印同时输出到屏幕上和文件中,或者同时输出到屏幕和多个文件中,在windows也可以下载一个第三方的tee软件完成相应的工作。(方法见:Windows系统下实现控制台软件的打印输出同时输出到屏幕和文件中_windows tee-CSDN博客 )
但此时,受到windows的打印输出缓冲的影响,你会发现打印内容不能实时输出,特别是打印间隔比较长,内容又不多的时候。此时,我们可以在主程序的循环周期中加入fflush()函数的调用,同步打印到屏幕和输出到文件就可以实时进行了。