• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

fork() zasada dzialania, analiza kodu

Cloud VPS
0 głosów
861 wizyt
pytanie zadane 22 czerwca 2015 w C i C++ przez dariusz Obywatel (1,800 p.)
Witam. Mam pytanie dotyczące poniższego kodu. Ile razy wyświetli się "kot" i dlaczego?

int main(void)
{
  if(!fork ()) fork();
  fork();
  puts("Kot");
  return 0;
}

2 odpowiedzi

0 głosów
odpowiedź 22 czerwca 2015 przez Dorion300 Szeryf (90,250 p.)

fork() tworzy nowy process i ten nowy process wykonuje operacje od "fork();" razem z głównym procesem.

Podejrzewam że "kot" pojawi się 4 razy.

Gdyż jak wykona się 1 raz fork() zwraca wartość 0, przez co wykonuje się kolejny fork po if'ie.

I jeszcze kolejny.

łącznie mamy 3 fork'i które wykonują "puts('kot')" i jeszcze jeden główny process. (łącznie 4 koty)

http://dnadesign.pl/2009/09/wspolbieznosc-w-c-fork/

komentarz 22 czerwca 2015 przez Dorion300 Szeryf (90,250 p.)
Ups, przepraszam za pomyłkę:

A zapomniałem o tym.

jest if który odpala fork.

ten fork nie spełnia if'a więc wykonuje drugi fork.

A ten fork kontynuuje swoją podróż i wywala tego kota na ekran. (1kot)

pierwszy Fork kontynuuje dalej i wywala kota na ekran (2kot)

Process główny spełnia swoje kryteria(if) i odpala następnego Fork'a

Ten fork wywołuje kolejnego fork'a drugieko.

ten drugi fork wypisuje na ekran. (3kot)

Potem ten pierwszy też wypisuje na ekran (4kot)

Process główny podróżuje swoją podróż i natrafia na kolejnego fork'a.

ten fork tylko wypisuje kota (5kot)

Potem process główny wypisuje kota(6kot)

Koniec.
0 głosów
odpowiedź 22 czerwca 2015 przez dariusz Obywatel (1,800 p.)
Kod wrzucony do kompilatora wyrzuca 6 kotów.
komentarz 22 czerwca 2015 przez Dorion300 Szeryf (90,250 p.)
A zapomniałem o tym.

jest if który odpala fork.

ten fork nie spełnia if'a więc wykonuje drugi fork.

A ten fork kontynuuje swoją podróż i wywala tego kota na ekran. (1kot)

pierwszy Fork kontynuuje dalej i wywala kota na ekran (2kot)

Process główny spełnia swoje kryteria(if) i odpala następnego Fork'a

Ten fork wywołuje kolejnego fork'a drugieko.

ten drugi fork wypisuje na ekran. (3kot)

Potem ten pierwszy też wypisuje na ekran (4kot)

Process główny podróżuje swoją podróż i natrafia na kolejnego fork'a.

ten fork tylko wypisuje kota (5kot)

Potem process główny wypisuje kota(6kot)

Koniec.

Podobne pytania

+5 głosów
9 odpowiedzi 2,108 wizyt
pytanie zadane 17 czerwca 2015 w C i C++ przez Radfler VIP (101,030 p.)
+5 głosów
12 odpowiedzi 3,211 wizyt
pytanie zadane 22 listopada 2015 w Rozwój zawodowy, nauka, praca przez Pixel040 Gaduła (3,100 p.)
+1 głos
5 odpowiedzi 6,856 wizyt

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

62,908 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...