Skip to content
Snippets Groups Projects

Expliquez précisément pourquoi le programme produit ce message à double

Suite au fait que stdout est flushé après l'appel de fork(), vu que le buffer est dupliqué dans le processus enfant, cela cause un affichage double.

Afin d'éviter cela, il aurait fallu flushé stdout avant l'appel à fork().

printf("Voilà un mystère digne de Sherlock Holmes !\n");
fork();

Modifiez le code en utilisant setbuf afin de corriger l'affichage

#include <stdio.h>
#include <unistd.h>

int main(void) {
    setbuf(stdout, NULL);
    printf("Voilà un mystère digne de Sherlock Holmes !");
    fork();
    printf("\n");
    return 0;
}

Déterminez l'appel système utilisé lors de l'utilisation de la fonction fork

Le nom de l'appel système est clone

clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f7c06d06350) = 266166