我正在运行以下代码,这是我在Mac上用c写的。拨打电话后打印出来的额外数据()
#include <unistd.h>
#include <stdio.h>
int main(int argc, const char * argv[]) {
int i = 0;
printf("Starting pid:%d\n", getpid());
while(i++<3){
int ret = fork();
printf("hello(%d)%d, %d ", i, getpid(), ret);
if(!ret){
printf("\n");
return 0;}
}
}
我脑子里想的目的是为了有6幅版画总 - 从原来的父3(PID“启动PID”打印),并从每个3个催生孩子的1以上。相反,我收到的是:
Starting pid:7998
hello(1)8009, 0
hello(1)7998, 8009 hello(2)8010, 0
hello(1)7998, 8009 hello(2)7998, 8010 hello(3)7998, 8011 hello(1)7998, 8009 hello(2)7998, 8010 hello(3)8011, 0
而且,原父(7998)打印6次(三次当我== 1次,用我== 2,和曾经与我== 3)。
为什么会发生这种情况?为什么我没有收到来自父母的三张照片(一次当我== 1,我== 2,我== 3)。如果我们从父母的角度来看它 - 有一个while循环,我们应该只打印3次。
叉可能是异步或什么的?我错过了什么?
优秀。重要的是缓冲区内容的复制。 –
哇..只是哇。 –
'fflush(NULL)'刷新所有打开的输出文件。 –