GNU C printf行缓冲问题
今天写项目时发现一个令人匪夷所思的问题,就是Printf函数一直打印不出预想的结果,搞得很郁闷
排查之后才发现是因为库函数printf的行缓冲的原因
简单复现一下:
这段代码会打印多少个数字呢?答案是256个,即使循环次数有257次,最后一个由于停留在了缓冲区中没有被打印出来,因此也不会显示在屏幕上。这是由于_exit(0)是内建的不完整的退出函数,并不打算帮你打印完整缓冲区内容再退出程序。如果需要退出的话应当调用exit函数。
如果将_exit函数换成一个while(1)死循环,或是execve函数,会得到同样的结果。调用fflush手动刷新缓冲显示可以避免类似情况。