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

  • Ben Vivona

    Ben Vivona

    24 Ocak 2010
  • Droid Life

    Droid Life

    17 Kasım 2009
  • Lena Danya

    Lena Danya

    11 NİSAN 2010