#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#define PUFFER 512


/*Werte für fdread und fdwrite sind :  */
/*     0=Standarteingabe  */
/*     1=Standartausgabe  */
/*     2=Standartfehler   */

int lesen_und_schreiben(int fdread, int fdwrite)
{
  int n;
  char puffer[PUFFER];

  while(( n=read(fdread, puffer, PUFFER)) > 0)
     if(write(fdwrite, puffer, n) != n)
       {
         write(2,"Fehler bei write.....\n",25);
         exit(0);
       }
}

int main(int argc, char **argv)
{
  int fd1,fdout,fdin,fderr,n;
  char datei[25], puffer[PUFFER];

  fdin =dup(0);    /*Standarteingabe*/
  fdout=dup(1);    /*Standartausgabe*/
  fderr=dup(2);    /*Standartfehler*/

  if(argc<2)
   {
     write(fderr,"Benutzung : programmname datei\n",35);
     exit(0);
   }

  if((fd1=open(argv[1],O_RDONLY)) == -1)
    {
       write(fderr,"Fehler beim öffnen der Datei\n",35);
       exit(1);
    }

/*Wir geben den Inhalt von fd1 an fdout (Standartausgabe) aus*/
  lesen_und_schreiben(fd1,fdout);

  close(fd1);

  while((n=read(fdin,puffer,PUFFER)) >1)
      write(fdout, puffer, n);

  return 0;
}