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