Я новичок в 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, так что может быть просто нормальное логическое объяснение всему этому =).
Спасибо за ваше время и ответы.