2013-05-19 3 views
3

Je le code suivant:comptage des processus après la fourche en boucle

for(i=1; i<=2; i++) 
{ 
    fork(); 
    printf("x "); 
} 

I calculé que x doit être imprimé 6 fois, deux fois dans la première itération et 4 fois dans le second.

Au lieu de cela, X est imprimé 8 fois. Pourquoi?

+2

duplication possible de [fork() et de la sortie] (http://stackoverflow.com/questions/9364410/fork-and-output) – hmjd

Répondre

7

En raison de la mise en mémoire tampon. Habituellement, stdout un tampon de ligne, de sorte

printf("x "); 

ne pas écrire immédiatement le "x " à la borne mais à la mémoire tampon de sortie. Cela est copié lorsque le processus fork() s, de sorte que chacun des quatre processus après la deuxième itération a deux "x " dans le tampon de sortie [un du parent/avant le début de la première itération, un de la deuxième itération] quand il sort et huit x s sont imprimés tout à fait.

Vider le tampon immédiatement après le printf("x "); et seulement six seront imprimés.

+0

'fflush (stdout);' est le moyen le plus simple de suivre les conseils de Daniel ici. –

Questions connexes