SORU
21 HAZİRAN 2012, PERŞEMBE


() çatal dalları beklenenden fazla?

Kod: aşağıdaki parça düşünün

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
    int i;
    for(i = 0; i < 2; i  )
    {
        fork();
        printf(".");
    }
    return 0;
}

Bu program 8 nokta verir. Bu nasıl mümkün olabilir? 6 nokta yerine, olmamalı mı?

CEVAP
21 HAZİRAN 2012, PERŞEMBE


fork() ilkel sık sık hayal uzanır. Bunun için bir fikir elde edene kadar, her işlem ne kadar kağıt üzerinde izleme ve işlem sayısı için hesap. Bu çatal unutma() sürecin mükemmele yakın bir kopyasını oluşturur. En önemli fark (çok amaçlı) fork()Bu değer, ebeveyn ve çocuk arasında farklı dönüş. Bu kodu dönüş değeri yok sayar (beri, hiç fark etmez.)

Yani, ilk başta, bir süreç var. Bu nokta ve bir döngü baskı hem de ikinci bir süreç oluşturur. İkinci yineleme, her bir kopyasını oluşturur, dört işlemler bir nokta yazdırmak ve çıkış vardır. Kolayca beklediğiniz gibi altı nokta hesap edebiliriz.

printf() gerçekten ne yaptığını ancak, onun çıkış arabelleği. Sadece iki işlem vardı ilk nokta yazılı görünmüyor. Bu noktalardan tampon kalır-çatal yineleniyor. Süreci tamponlu nokta görünen çıkmak üzere kadar değil. Dört arabellekli bir nokta baskı işlemleri, yeni bir 8 nokta verir artı.

Eğer bu davranışı engellemek istiyorsa, fflush(stdout); printf() sonra Ara.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CorridorDigital

    CorridorDigi

    17 Mayıs 2010
  • Lin Steven

    Lin Steven

    17 EKİM 2006
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011