#include #include #include #include int main(void) { int p[2]; // tube : p[0] lecture, p[1] écriture pid_t pf1, pf1f1, pf2; pipe(p); // --- créer Pf1 --- pf1 = fork(); if (pf1 == 0) { // --- créer Pf1f1 --- pf1f1 = fork(); if (pf1f1 == 0) { // Pf1f1 : lecteur close(p[1]); // ne garde que la lecture while (1) { pid_t v; read(p[0], &v, sizeof(v)); int valeur = read(p[0], &v, sizeof(v)); printf(" %d received %d\n", (int)getpid(), (int)v); fflush(stdout); sleep(1); } } close(p[0]); close(p[1]); while (1){ pause(); } } // --- créer Pf2 --- pf2 = fork(); if (pf2 == 0) { //Pf2 : écrivain close(p[0]); // ne garde que l’écriture pid_t cmoi = getpid(); while (1) { printf("%d sent %d\n", (int)cmoi, (int)cmoi); fflush(stdout); write(p[1], &cmoi, sizeof(cmoi)); sleep(3); } } //P COMME PAPA close(p[0]); close(p[1]); while (1){ pause(); } printf(valeur); } // Question 3 : (Envoyez le signal SIGSTOP à Pf2, puis le signal SIGCONT à Pf2) // Pour le premiere comportement quand je stop le processus pf2 avec un kill -STOP 211912 alors mon programme est comme en pause c'est normal car l'action du prcessus de pf1f1 dependait du tube qui relie donc comme il a rien a recevoir il attend. // Puis quand j'utilise SIGCONT le programme se debloque car le pf2 n'est plus gélé donc le pf1f1 peut lire les informations qu'on lui donne. //(Envoyez le signal SIGSTOP à Pf1f1, puis le signal SIGCONT à Pf1f1.) //Lors du moment ou j'ai envoyer ce signal le processus pf2 continue d'envoyé ses information au processus pf1f1 sauf que lui comme il est gelé ne reagit pas à sa "requete". // Puis ainsi il rattrape tous ces requetes qui n'a pas pu repondre et du coup comme il est plus rapide que pf2 a la relance il a recup tous les pid possible comme dans le tube il etait rempli de ça donc il a lu les pid qui était la dans le tube.