#include <stdio.
h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main() {
int parent_to_child[2];
int child_to_parent[2];
pid_t pid;
char message_enfant[] = "leon";
char reponse_parent[] = "bien";
char buffer_enfant[100];
char buffer_parent[100];
// Création des deux tubes
if (pipe(parent_to_child) == -1 || pipe(child_to_parent) == -1) {
perror("pipe");
exit(1);
// Création du processus enfant
pid = fork();
if (pid < 0) {
perror("fork");
exit(1);
} else if (pid > 0) { // Processus parent
// Fermeture des côtés inutilisés du tube
close(parent_to_child[0]);
close(child_to_parent[1]);
// Le parent attend de lire le message de l'enfant
read(child_to_parent[0], buffer_parent, sizeof(buffer_parent));
printf("Message reçu par le parent : %s\n", buffer_parent);
// Le parent envoie la réponse "bien" à l'enfant
write(parent_to_child[1], reponse_parent, strlen(reponse_parent) + 1);
// Fermeture des côtés utilisés du tube
close(parent_to_child[1]);
close(child_to_parent[0]);
} else { // Processus enfant
// Fermeture des côtés inutilisés du tube
close(parent_to_child[1]);
close(child_to_parent[0]);
// L'enfant envoie le message "leon" au parent
write(child_to_parent[1], message_enfant, strlen(message_enfant) + 1);
// L'enfant attend de lire la réponse du parent
read(parent_to_child[0], buffer_enfant, sizeof(buffer_enfant));
printf("Réponse reçue par l'enfant : %s\n", buffer_enfant);
// Fermeture des côtés utilisés du tube
close(parent_to_child[0]);
close(child_to_parent[1]);
return 0;