在linux系统中,使用printf打印数据时会先将数据放入stdio缓冲区中,然后在以下三种情况才会将缓冲区的数据刷到内核缓冲区:
1.调用exit退出程序、return退出程序等结束程序运行(调用_exit _Exit则不行)
2.stdio缓冲区爆满
3.close关闭文件、
4.遇见 \r 字符(默认设置如此,可修改)
所以如果文件中最后一个printf若没有在末尾加 /r ,则在程序运行阶段始终无法打印数据至显示器。故在以下代码运行中只会输出第一句话:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
printf("Hello World!\n");
printf("Hello World!");
for ( ; ; )
sleep(1);
}
如果删掉下面的死循环,两句话都会被输出。
另外需注意换行符号为 \n ,我一开始就老写成 \r(回车符,回到行首)导致某行打印不出来,原因是\n会使光标回到行首,此时如果后面还有printf会覆盖掉前面的数据。比如:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
printf("this is a test file!\r");
printf("Hello World!");
retrun 0;
}
会输出"Hello World!st file"