#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
#include <signal.h>
#include <string.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 *reading, *writing, *newfile;

  if(argc !=2)
    { USAGE; exit(0); }

  if((newfile=fopen(argv[1], "a+")) < 0)
    { perror("fopen : "); 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*/
     if((writing=fdopen(fd[1], "w")) == NULL)
       { perror(" fdopen : "); exit(0); }
     fgets(puffer, MAX, stdin);
     fputs(puffer, writing); /*Wir schreiben in die Pipe*/
   }
  else /*Kindprozess*/
   {
     close(fd[1]); /*Schreibseite schließen*/
     if((reading=fdopen(fd[0], "r")) == NULL)
        { perror(" fdopen : "); exit(0); }
     fgets(puffer, MAX, reading); /*Wir lesen aus der Pipe*/
     fputs(puffer, newfile);
   }
  exit(0);
}