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