2012-03-06 15 views
6

Powiel możliwe:
Working of fork() in linux gccDlaczego ten kod jest drukowany dwa razy?

#include <stdio.h> 

void main() 
{ 
    printf ("ciao"); 
    fork(); 
} 

Mam kilka pomysłów na optymalizację C, ale nie jestem pewien. Mam nadzieję, że znasz odpowiedź.

+4

Czy próbowałeś go uruchomić? – MByD

+2

Nie jestem całkiem pewien, że rozumiem to pytanie. To dość oczywiste, co drukuje. Również main powinien zwrócić int, a funkcja fork() nie jest jasna :) –

+0

Tak, wyświetla "ciaociao". Moje pytanie dotyczy tego, dlaczego to drukuje. – gc5

Odpowiedz

14

Kod będzie prawdopodobnie drukował "ciao" dwa razy, ponieważ standardowe wyjście jest buforowane IO, więc bufor wewnętrzny dla standardowego wyjścia zostanie zreplikowany w procesie potomnym, a oba bufory zostaną przepłukane, gdy zakończy się każdy proces, nadrzędny i podrzędny.

Nie ma związku z optymalizacją.

4

gdy fork() jest wywoływana, zarówno proces rodzic i dziecko odziedziczy go i dlatego obaj będą

print out „ciao”, kiedy opróżnić bufor. Jeśli wywołasz fflush (standardowe wyjście);

przed wywołaniem widelca zostanie wydrukowany tylko raz

Powiązane problemy