/****************************************/
/*                                      */
/*  Prof. Dr. Carsten Vogt              */
/*  Fachhochschule Koeln                */
/*  Fakultaet 07, Nachrichtentechnik    */
/*  http://www.nt.fh-koeln.de/vogt      */
/*                                      */
/*  UNIX-C-Schnittstelle:               */
/*  Prozesskommunikation ueber          */
/*  unbenannte Pipes                    */
/*                                      */
/****************************************/

#include <stdio.h>
#include <stdlib.h>

main() {

 char buffer[5];  /* Puffer zum Datenempfang */

 int fd[2];  /* Deskriptoren fuer Leseende (fd[0])
                und Schreibende (fd[1]) der Pipe */

 /* Erzeugung einer unbenannten Pipe und Speichern der
    Deskriptoren fuer Lese- und Schreibende in fd. */

 printf("\nVater erzeugt die unbenannte Pipe\n");

 pipe(fd);

 if (fork()==0) {

  /* Sohnprozess als Schreiber */

  /* Lesedeskriptor schliessen, da nicht benoetigt */

  close(fd[0]);

  /* 5 Bytes in die Pipe schreiben (4 Buchstaben + Ende-Zeichen \0) */

  printf("\nSohn schreibt TEST in die Pipe\n");
  write(fd[1],"TEST",5);

  exit(0);

 }

 /* Vaterprozess als Leser */

 /* Schreibdeskriptor schliessen, da nicht benoetigt */

 close(fd[1]);

 /* 5 Bytes aus der Pipe lesen */

 read(fd[0],buffer,5);

 printf("\nVater liest %s aus der Pipe\n\n",buffer);

}
