Странная аномалия C при записи в файл (нормально работает при записи в stdout)

Я новичок в C, поэтому, пожалуйста, потерпите меня. Я очень долго боролся с этим, и мне было трудно сузить причину ошибки.

Я заметил, что когда процесс разветвляется и записывается в файл (только исходный процесс записывает в файл, происходит странная вещь , результат почти умножается на количество вилок, что трудно объяснить, поэтому я сделал небольшой тестовый код, в котором вы можете запустить, и он воссоздает проблему.

#include <stdio.h>
#include <stdlib.h>


void foo()
{
  FILE* file = fopen("test", "w");
  int i=3;
  int pid;
  while (i>0)
  {
    pid=fork();
    if(pid==0)
    {
      printf("Child\n");
      exit(0);
     }
    else if(pid > 0)
    {
      fputs("test\n", file);
      i=i-1;
     }
 }

}

int main()
{
  foo();
  exit(EXIT_SUCCESS);
}

Скомпилируйте и запустите его один раз, как есть, и один раз с ] file = stdout . При записи в stdout вывод будет:

test
test
test

Но при записи в файл вывод будет:

test
test
test
test
test
test

Также, если вы добавите индексирование и измените i на большее число, вы можете увидеть какой-то узор, но это мне не помогает.

Честно говоря, я понятия не имею, почему это могло произойти, и как это исправить. Но я полный новичок в C, так что может быть просто нормальное логическое объяснение всему этому =).

Спасибо за ваше время и ответы.

5
задан Kev 4 June 2011 в 20:48
поделиться