[C++] branches fork () plus que prévu?


Answers

Vous avez des tampons non validés dans les flux de sortie . stdout est mis en mémoire tampon et le tampon est répliqué avec le reste du processus. Lorsque le programme se termine, le tampon non engagé est écrit deux fois (une fois pour chaque processus). Les deux utilisant

printf("a\n");

et

printf("a "); fflush(stdout);

ne montrez pas le problème.

Dans votre premier exemple, vous créez quatre processus qui ont chacun deux points dans leur tampon de flux de sortie. Lorsque chaque flux se termine, il vide son tampon, générant huit points.

Question

Considérez le morceau de code suivant:

#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;
}

Ce programme produit 8 points. Comment cela peut-il être possible? Ne devrait-il pas y avoir 6 points à la place?