if (fork ()) fork () - PullRequest
       32

if (fork ()) fork ()

2 голосов
/ 26 ноября 2010

Я учусь на викторину ОС и не понимаю, что выдаст

if(fork())
    fork()

.Может кто-нибудь объяснить?

Я не понял эту строку:

if(fork())

Редактировать:

Что я имел в виду под «выводом», какмногие процессы будут там, если этот код был выполнен.

Извините, у меня закружилась голова после учебы.

Ответы [ 4 ]

10 голосов
/ 26 ноября 2010

Вот подсказка: if (fork()) это всего лишь короткий способ написания if (fork() != 0).

4 голосов
/ 26 ноября 2010

Возможно, вам лучше всего просто попробовать, прочитав документацию для fork, а затем, если это все еще не имеет смысла, задать более конкретный вопрос о том, какую часть вы не понимаете.

Начните с попытки:

#include <stdio.h>
#include <unistd.h>
int main(int argc,char **argv){
    int x,y=0;
    x = fork();
    if (x) y = fork();
    printf("x: %d, y: %d\n",x,y);
    return 0;
}
2 голосов
/ 14 февраля 2012

У меня была такая же проблема, как и у вас.

значение ::::::> if (fork())

if (fork() !=0), и, как вы знаете:

  • fork(): может принимать 3 значения!

  • fork() = 0 для ребенка.

  • fork() < 0 ошибка.

  • fork() > 0 родитель.

Итак:

if ( 0 != O ) ==> false (в этом случае выне нужно делать 2 fork ())

if (-123 != 0 ) ==> True (да, у вас есть).

if (5 != 0 ) ==> true (да, у вас есть).

хорошо, как

0 голосов
/ 13 декабря 2012

для родителей

if (fork()) is 

оценивается как

if(pid_of_child) 

и для дочернего процесса он оценивается как:

if(0)

вот и все:)

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