我想我在这里做简单的东西,但是C决定去异步我。 我不知道发生了什么事。 这里是我的代码:
#include <stdio.h>
int main() {
printf("start");
sleep(5);
printf("stop");
}
当我编译和运行,我发现, sleep(5)
工程就像一个魅力。 但是编译器决定,是跳过第一个好主意printf()
和走出去的顺序,因此在运行时,程序将等待5秒钟,然后打印startstop
。
这是怎么回事? 我的理论是,该方案启动与外壳的打印操作,那么该程序继续进行,留下的Bash等到程序不再忙于实际呈现的字符串。 但我真的不知道。
谢谢
printf
使用缓冲的输出 。 这意味着,数据在第一存储器缓冲器累积之前,它是刷新到输出源,在这种情况下是stdout
(通常默认为控制台输出)。 使用fflush
你的第一个之后printf
语句来强制其缓存数据刷新到输出源。
#include <stdio.h>
int main() {
printf("start");
fflush(stdout);
sleep(5);
printf("stop");
}
另请参阅为什么不printf的调用后,除非换行符是格式字符串冲洗?
尝试添加“\ n”你的printf语句,就像这样:
#include <stdio.h>
int main() {
printf("start\n");
sleep(5);
printf("stop\n");
}
编译器不执行这一点的顺序。 只是输出得到累积,然后程序退出时显示。 在“\ n”将调用线路规程的tty驱动刷新输出。
文章来源: Why is the line following printf(), a call to sleep(), executed before anything is printed?