为什么以下行的printf()调用睡眠(),任何事情之前执行打印?(Why is the line

2019-09-01 00:16发布

我想我在这里做简单的东西,但是C决定去异步我。 我不知道发生了什么事。 这里是我的代码:

#include <stdio.h>
int main() {
    printf("start");
    sleep(5);
    printf("stop");
}

当我编译和运行,我发现, sleep(5)工程就像一个魅力。 但是编译器决定,是跳过第一个好主意printf()和走出去的顺序,因此在运行时,程序将等待5秒钟,然后打印startstop

这是怎么回事? 我的理论是,该方案启动与外壳的打印操作,那么该程序继续进行,留下的Bash等到程序不再忙于实际呈现的字符串。 但我真的不知道。

谢谢

Answer 1:

printf使用缓冲的输出 。 这意味着,数据在第一存储器缓冲器累积之前,它是刷新到输出源,在这种情况下是stdout (通常默认为控制台输出)。 使用fflush你的第一个之后printf语句来强制其缓存数据刷新到输出源。

#include <stdio.h>
int main() {
    printf("start");
    fflush(stdout);
    sleep(5);
    printf("stop");
}


另请参阅为什么不printf的调用后,除非换行符是格式字符串冲洗?



Answer 2:

尝试添加“\ n”你的printf语句,就像这样:

#include <stdio.h>
int main() {
    printf("start\n");
    sleep(5);
    printf("stop\n");
}

编译器不执行这一点的顺序。 只是输出得到累积,然后程序退出时显示。 在“\ n”将调用线路规程的tty驱动刷新输出。



Answer 3:

阅读本Q&A,它解释了它。



文章来源: Why is the line following printf(), a call to sleep(), executed before anything is printed?
标签: c printf sleep