上周末帮助一个同学写个demo验证一下他看书看到的东西,在linux下面先打印"%%",然后再sleep 10秒。结果打印结果立马就出来了,结果同学表示很疑惑,亲自验证,结果尽然是后打印出来。类似于
printf("%%");sleep(10);有点晕,网上收了一下大概是跟printf的实现有关系,网上说是由于标准IO的行缓存造成的。貌似printf是把缓冲区写满了才输出的,所以回想起来大概是因为我敲了换行符所以每次都会先打印出来。
感觉自己的实力好弱啊,怎么办呢就要找工作了。
网上还有个类似的问题 http://bbs.chinaunix.net/thread-1060743-1-1.html
主要就是在讨论:
代码如下:
#include <stdio.h> int main (int argc,char **argv) { while (1) { printf ("Hello Linux \n"); sleep(1); } return 0; } 输出结果:每隔1秒输出Hello Linux 将上面代码改成: #include <stdio.h> int main (int argc,char **argv) { while (1) { printf ("Hello Linux "); sleep(1); } return 0; } 即将printf中的\n去掉,此程序运行时不会按照一秒钟输出一次Hello Linux. 大概过了几十秒输出一大串的Hello Linux.
现在先占个坑,有机会研究一下linux的IO机制再来补充。
Linux下关于printf 与sleep一起运行的困惑
最新推荐文章于 2021-07-05 15:11:01 发布