这是我的C程序:
int main() {
fork();
printf("one ");
fork();
printf("two ");
}
输出结果为:
one two one two one two one two
但是,如果我更改代码并在print语句中添加\n
:
int main() {
fork();
printf("one\n");
fork();
printf("two\n");
}
输出结果为:
one
one
two
two
two
two
或者有时候(订单可以改变):
one
two
one
two
two
two
为什么第一个程序中输出8
个字,第二个程序中输出6
?
答案 0 :(得分:1)
2个进程执行第一个printf()
,然后4个进程执行第二个printf()
,因此应该有6个输出。
在第一个代码中,似乎在刷新缓冲区之前执行fork()
,然后重复缓冲区的内容,然后出现过量输出。
在第二个代码中,似乎\n
让它刷新缓冲区,因此没有出现多余的输出。