Будет ли эта функция всегда иметь четыре строки вывода? - PullRequest
0 голосов
/ 14 апреля 2020

Будет ли следующая функция всегда иметь четыре строки вывода? Если нет, то в чем причина? Как и в каких случаях?

int main(int argc, char** argv) {
    printf("hello1\n");
    return 0;
}

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

При успехе fork() PID дочернего процесса возвращается в родительском, а 0 возвращается в дочернем. В случае неудачи возвращается -1 в родительском элементе, дочерний элемент не будет создан (из man-страницы fork).

Таким образом, fork() также может завершиться ошибкой. Таким образом, ваша программа в случае успеха напечатает 4 строки (дочерний элемент выведет «C1H2I3L4D \ n», а родительский - «hello1 \ n», «helloh \ n», «helloqq \ n»).

Вкл В случае неудачи он напечатает только 3 строки «hello1 \ n» перед вызовом fork и «helloh \ n», «helloqq \ n» после ответвления (из родительского процесса и потомка не будет создано).

если у вас все еще есть сомнения, откройте терминал и введите man fork. Посмотрите на возвращаемое значение.

1 голос
/ 14 апреля 2020

Самая очевидная вещь, на которую следует обратить внимание, это то, что fork() вполне может потерпеть неудачу, возвращая -1, и в этом случае printf() будет вызываться только 3 раза. Кроме того, printf() тоже может выйти из строя. Итак, чтобы ответить на ваш вопрос:

Будет ли эта функция всегда иметь четыре строки вывода?

Нет. Вы не можете ничего сказать об этом, не запустив программу или не сделав сначала некоторые предположения, и вы определенно не можете сказать «всегда».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...