调用fork()一次,父进程会返回子进程的pid(大于0),子进程返回0,如果调用失败则返回-1。下面看一下下面都会打印出什么结果。
模拟过程应该是下面的图:
第一次循环时,父进程打印一个B,子进程打印一个A,因为子进程和父进程都执行fork()之后的代码,所以第二次的时候,第一个进程会再打印一个A,一个B,第二个进程也会打印一个A,一个B,故一共是打印3个A,3个B。
下面来修改一下代码看看结果:
可以看到一共打印了四个A,4个B,???这又是什么原因呢?
下面进行分析
当不见”\n”时,是先将数据放入缓冲区中,到最后再从缓冲区中把数据输出到显示器上,故我们会看到4个A,4个B。
再来看一个变形:
会看到打印BAA,因为pintf(“A”)只是将A放入缓冲区中了,而write(1,”B”,1)会直接将B打印出来,之后fork()后就是父子进程分别打印缓冲区中的数据。