fork()在这个C程序中如何工作?

时间:2017-10-22 16:24:31

标签: c operating-system fork

#include <stdio.h>
#include <unistd.h>
int main(void) {
  int i = 0;
  for (i = 0; i < 4; i++) {
    fork();
    printf("foo\n");
  }
  return 0;
}

这会打印“foo”30次。为什么呢?

如果管道输出,为什么它会打印“foo”64次?

$ ./a.out | wc -l
64

1 个答案:

答案 0 :(得分:1)

当您调用fork()时,所有内容都会重复。所以你会在每次迭代中加倍。这就是它打印2 + 4 + 8 + 16 = 30倍的原因。如果您为此流程打印i的值和PID,则可以很容易地看到这一点。

正如mch所说,管道将输出缓冲区从缓冲行更改为完全缓冲,因此fork也会复制缓冲区内容。这就是为什么你得到64个打印输出。