2016-04-19 12 views
8

Jeśli po nazwie fork() program powinien być kontynuowany od pierwszej instrukcji następującej po rozwidleniu, dlaczego słowo START zostanie wydrukowane dwa razy?Dlaczego printf(), który poprzedza fork() zostanie wykonany nawet po fork()?

#include<stdio.h> 
#include<unistd.h> 

int main(){ 
     int pid; 
     printf("START..."); 
     pid = fork(); 
     printf("%d: I've got %d\n", getpid(), pid); 
     return 0; 
} 

Na przykład możliwe jest wyjście:

START ... 605: Mam 606

START ... 606: Mam 0

Odpowiedz

8

Ponieważ nie opróżniono bufora wyjściowego, a więc tekst istnieje w buforze wyjściowym rodzica i dziecka po wartości fork().

Po printf() dodaj różnicę.

+0

Możesz również dodać znak nowej linii ("\ n") na końcu łańcucha, a bufor powinien zostać przepłukany. – ciamej

+0

@ciamej Tak, jednak da to (nieco) inne wyniki. – trojanfoe

+0

@SergeyA Nie wiedziałem, że to dupek. Dlaczego nie zadałeś tego samego pytania o dasblinkenlight? – trojanfoe