
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <stdlib.h>


void erreur(const char * message);
void main() {
  int p[2];
  char message[15];
  pid_t pid;
  int retour,statut;

  retour = pipe(p);
  if (retour==-1) erreur("Erreur pipe");
    pid = fork();
  switch(pid) {
    case -1:
      erreur("Erreur fork:");
    case 0:
      retour = write(p[1],"Salut Papa",11);
      if (retour == -1) perror ("Erreur write p[1] du fils:");
      sleep(4);
      kill(getppid(), SIGCONT);
      kill(getpid(), SIGSTOP);
      retour = read(p[0],message,11);
      if (retour == -1) perror ("Erreur read p[0] du fils:");
      else printf("Message lu par le fils %s\n", message);
    break;
    default :
      kill(getpid(), SIGSTOP);
      retour = read(p[0],message,11);
      if (retour == -1) perror ("Erreur read p[0] du pere:");
      else printf("Message lu par le pere %s\n", message);
      retour=write(p[1],"Salut Fils",11);
      if (retour == -1) perror ("Erreur write p[1] du pere:");
      sleep(3);
      kill(pid, SIGCONT);
      wait(&statut);
  }
  printf("Libere les descripteurs\n");
  close (p[1]);
  close (p[0]);
}
void erreur(const char * message) {
  perror(message);
  exit(-1);
}
