Fourche () succède plus que prévu? [c++]


Answers

Vous avez des mémoires non validées dans les flux de sortie . Stdout est linéaire et le tampon est répliqué avec le reste du processus. Lorsque le programme se termine, le tampon non confirmé est écrit deux fois (une fois pour chaque processus). Les deux utilisant

printf("a\n");

et

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

Ne présentent 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 évacue son tampon, générant huit points.

Question

Considérez le 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?