2016-04-13 19 views
0

Çatal fonksiyonunu tam olarak anlayamıyorum, baba ve çocuğun fork() fonksiyonundan nasıl devam ettiğini anlamadım ya da bu satırı atlayıp bir sonrakine geçiyorum. örneğin:Bu programdaki çocuğun nasıl çalıştırılacağı?

int value = 0; 
if (fork()!=0) 
{ 
wait(&value); 
value = WEXITSTATUS(value); 
value++; 
} 
printf("%d\n",value); 
value+=2; 
exit(value); 

bebeğin babasının bekleme() fonksiyonu için gitmek ama çocuk kaçmaya başlar yerden ben bunu anlamıyorum eğer() veya o kaçıp gitmek neyi çatal işlevini uyguladıklarında printf için hemen? :)

+0

Denediğinde ne oldu? –

+0

Aslında ben sadece çatalı anlamaya çalışmıyorum ve bu fonksiyonda ne olacak? – Eli

+1

Neden denemedin? Koşmak onun operasyonunu gösterirdi. –

cevap

0

tüm program yineleniyor ve yardımcı olduğunuz için teşekkürler baba ve oğul hem çatal dönüş değeri olmayan boş olduğu için babası if içine girmek fork() itibaren başlar ve sonra

printf("%d\n",value); 
value+=2; 
exit(value); 

gidin Oğul sadece bu satıra giderken, pid sıfırdır.

oğul 2 çünkü hat value += 2 arasında çıkar.

baba (= 2, yani değeri), sonra değerini bu değer bekler (değeri = 3), ve daha sonra ilave 2 (değeri = 5). çağırmak sürecin

+0

Eğer bu doğru anlamadıysam, eğer çocuk ve baba süreci işe yararsa, o zaman çıktı: 0 ve sonra 3? – Eli

+0

Yukarıdaki düzenlemeye bakın. – Boiethios

0

fork() temelde makes a copy. mevcut kullanıcı işaretçi de dahil olmak üzere, fork() denilen işlemin zamanı durumuna karşılık gelmektedir

. ebeveyn ve çocuk süreci arasındaki temel fark, eski süreç için bir PID döndürür iken fork() dönüş değeri 0 dönecektir böylece eski sürecin yeni kopyası değiştirilmiş olmasıdır. Bunun dışında, çocuk üst öğe ile aynı durumda olacak ve üst öğe ile aynı noktadan, yani fork() numaralı çağrıya devam edecektir.

İlgili konular