今天写了个服务器的demo,但是中间的printf都没有显示出来,测试了一波,都没有找到明显的原因。
查了一下,原来是输出缓冲的问题,所以单独的程序,执行结束即刷新缓冲区,带死循环的程序,陷入循环中,迟迟不刷新缓冲区,所以printf的内容不会显示到控制台。
原因: 输出缓冲区的问题.
unix上标准输入输出都是带有缓存的,一般是行缓存。
对于标准输出,需要输出的数据并不是直接输出到终端上,而是首先缓存到某个地方,当遇到行刷新标志或者该缓存已满的情况下,才会把缓存的数据显示到终端设备上。
ANSI C中定义换行符’\n’可以认为是行刷新标志。所以,printf函数没有带’\n’是不会自动刷新输出流,直至缓存被填满。
解决方案:
方案1、在printf里加”\n”
方案2、fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上 。