#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>

#define USAGE printf("usage : %s Datei\n",argv[0]);
#define MAX 4096

int main(int argc, char *argv[])
{
  int fd[2], fd1,i, n;
  pid_t pid;
  char puffer[MAX];
  FILE *datenzeiger;

  if(argc !=2)
    { USAGE; exit(0); }

  if((fd1=open(argv[1], O_RDONLY)) < 0)
    { perror("open : "); exit(0); }

/*Wir erstellen eine pipe*/
  if(pipe(fd) <0)
    { perror("pipe : "); exit(0); }

/*Wir erzeugen einen neuen Prozess*/
  if((pid=fork()) < 0)
    { perror("pipe : "); exit(0); }

  else if(pid > 0) /*Elternprozess*/
    {
      close(fd[0]); /*Leseseite schließen*/
      n=read(fd1, puffer, MAX);
      if((write(fd[1], puffer, n)) != n)
          { perror(" write : "); exit(0); }
      if((waitpid(pid, NULL, 0)) < 0)
          { perror("waitpid : "); exit(0); }
    }
  else /*Kindprozess*/
    {
      close(fd[1]); /*Schreibseite schließen*/
      n=read(fd[0], puffer, MAX);
      if((write(STDOUT_FILENO, puffer, n)) != n)
         { perror(" write : "); exit(0); }
    }
  exit(0);
}