2016-04-19 69 views
8

fork() çağrıldıktan sonra program çatalın ardından ilk komuttan devam etmeli, neden START sözcüğü iki kez basılır?Çataldan() önce gelen printf(), 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; 
} 

Örneğin olası bir çıktısı:

BAŞLANGIÇ ... 605: Ben 606

BAŞLANGIÇ var ... 606: Ben

0 var

cevap

8

Çıktı arabelleğini temizlemediniz ve bu nedenle metin fork()'dan sonra hem ebeveyn hem de çocuğun çıktı arabelleğinde var.

İlk printf()'dan sonra fflush(stdout); ekleyin ve farkı görün.

+0

Ayrıca, dizenin sonuna yeni satır ('\ n') ekleyebilir ve arabellek temizlenmelidir. – ciamej

+0

@ciamej Evet, ancak bu (biraz) farklı çıktı verecektir. – trojanfoe

+0

@SergeyA Bir dupe olduğunu bilmiyordum. Ayrıca neden aynı dasblinkenlight sorusunu sormadınız? – trojanfoe