Как все эти родительские и дочерние вещи связаны с циклическим файловым вводом / выводом?
от вопрос уже есть ответ здесь:
Почему разветвление моего процесса приводит к тому, что файл читается бесконечно 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: У меня есть теория, я не могу доказать это, может быть, вы можете мне помочь. Это может быть ситуация, когда указатель файла разделяется между процессами, когда выходит дочерний процесс, он закрывает файл, а когда родитель пытается прочитать снова, он просто начинается с начала (или какое-то другое странное поведение). Может ли это быть так?