Как все эти родительские и дочерние вещи связаны с циклическим файловым вводом / выводом?

от вопрос уже есть ответ здесь:

Почему разветвление моего процесса приводит к тому, что файл читается бесконечно 3 ответа

Я создаю многопроцессную программу. Когда я попытался вызвать fork () в цикле for, используяif(f == 0) break;, Я получил желаемое количество дочерних процессов.

Однако сейчас я имею дело с входным файлом, и желаемое количество процессов не известно изначально. Вот наименьший возможный пример моего кода.

FILE* file = fopen("sample_input.txt", "r");
while(fscanf(file, "%d", &order) == 1){      
    f = fork();
    if(f == 0){
        break;
    } 
}

примерsample_input.txt:

5 2 8 1 4 2

Сейчас создаются тысячи дочерних процессов (я хочу 6, количество целых чисел в файле), в чем может быть причина? Это как-то связано с указателем файла?

Редактировать: Я сделал некоторую отладку с выходами консоли, дочерние процессы действительно выходят из цикла. Однако родитель продолжает читать маленький файл снова и снова. Если я удалюfork()цикл выполняется 6 раз, как и предполагалось.

Edit2: У меня есть теория, я не могу доказать это, может быть, вы можете мне помочь. Это может быть ситуация, когда указатель файла разделяется между процессами, когда выходит дочерний процесс, он закрывает файл, а когда родитель пытается прочитать снова, он просто начинается с начала (или какое-то другое странное поведение). Может ли это быть так?

Ответы на вопрос(2)

Ваш ответ на вопрос