Я изучаю функцию fork в C и учился на прошлых экзаменах и столкнулся с одним вопросом, который довольно интересен.Расположение функции fork в C и ее влияние на выход
Смотрите ниже код:
int main(void) {
printf("Hello ");
fork();
printf("Hello ");
fork();
printf("Hello \n");
pause();
return 0;
}
Выходной результат
Hello Hello Hello
Hello Hello Hello
Hello Hello Hello
Hello Hello Hello
Если я изменить мой код
fork();
fork();
printf("Hello ");
printf("Hello ");
printf("Hello \n");
В результате выход остается прежним. Почему расположение функции вилки не влияет на сам вывод. Вилка ждет завершения printf() перед выполнением? Это должно объяснить вывод, потому что в первый раз printf() выведет первую строку Hello, тогда он будет разветвлен, и еще 1 строка Hello будет напечатана. Затем вторая вилка разветвит предыдущие 2 строки и произведет еще две строки Hello.
Однако вопрос немного меняет код, и весь результат резко меняется.
printf("Hello \n");
fork();
printf("Hello ");
fork();
printf("Hello \n");
Это приводит к выходу будучи
Hello
Hello Hello
Hello Hello
Hello Hello
Hello Hello
Я не понимаю, почему просто добавив «\ п» приведет к 5 строк вывода вместо 4. На этот раз, если я поменяю расположение функции вилки вверху, как и раньше, выход тоже изменяется. Кажется, что функция fork не влияла на первую строку printf на этот раз. Может ли кто-нибудь объяснить мне, как именно функция fork выводит материал?
Было бы намного яснее, если бы строки не были одинаковыми ... – BadZen