请看下面的代码。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
fork();
printf(".");
fflush(stdout);
fork();
printf(",");
return 0;
}
输出是:
..,,,,
这对我来说没问题,
但是如果我fflush(stdout)
从上面的程序中删除,那么输出应该是(根据我的理解)。
...,.,.,.,
is 的语句fork()
:紧随其后的语句fork()
被复制到父级和子级中。
我的理解是:在第一个fork()
之后有两个进程(假设它是进程 p 和进程 c)我们有
进程 p 和 c 中的代码是:
printf(".");
fork();
printf(",");
现在,假设执行了进程 p 和 c 的第一条语句,那么输出将是 .
..
现在fork()
语句开始执行。所以,在执行之后fork()
,我们的进程就像 p , pc ,c ,cc 一样。
p , pc , c 和 cc 中的代码是
printf(",");
我们不冲洗stdout
所以printf(".")
仍然存在于每个缓冲区中。
所以每个进程都会打印.,
所以输出是
.,.,.,.,
我的问题是:1)以前在哪里..
?即根据我的解释,输出应该是
...,.,.,.,