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

  • AlaskanGrizzly

    AlaskanGrizz

    30 EKİM 2009
  • AutoklubZAPRESIC

    AutoklubZAPR

    17 Mayıs 2011
  • RickardRick

    RickardRick

    9 Mart 2007