我已经用C编写程序并在Ubuntu中运行,主要代码如下:
int main(){
pid_t pid=fork();
if(pid==0){
printf("d");
exit(0);
}
else{
printf("a");
sleep(4);
}
}
问题是:为什么代码sleep(4);
在printf("a");
之前运行
希望有人能给我一个答案,谢谢!
答案 0 :(得分:4)
不是。最有可能的是,printf()
缓冲了它的输出,直到有机会输出缓冲区(在你的情况下,当进程终止时)。
答案 1 :(得分:3)
问:为什么代码sleep(4)在printf(“a”)之前运行?
答:printf(“a”)实际上运行 BEFORE “sleep(4)”,就像你在代码中看到的一样。
但是,它不会立即 DISPLAY 。
问题是“缓冲”。
在此查看更多详情:
建议替代方案:
pid_t pid=fork();
if(pid==0){
fprintf(stderr, "d");
exit(0);
}
else{
fprintf(stderr, "a");
sleep(4);
}
原因是“stderr”是无缓冲的:你会立即看到输出。
使用stderr的替代方法包括调用fflush(stdout)
或modifying the stream。
答案 2 :(得分:2)
不是,但可能会出现这种情况。 printf
将其输出放入缓冲区,该缓冲区可能仅在sleep
运行后刷新。尝试在fflush(stdout)
之后,但在致电printf
之前拨打sleep
。