#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 1024

void dateien_oeffnen(char *quelle, char *ziel, FILE **ein, FILE **aus)
{
 if((*ein=fopen(quelle,"rb")) == NULL)
  {
   fprintf(stderr,"Fehler beim öffnen von %s\n",quelle);
   exit (0);
  }
 if((*aus=fopen(ziel,"wb")) == NULL)
  {
   fprintf(stderr,"Fehler beim öffnen von %s\n",ziel);
   exit (1);
  }
}


int main()
{
 int c,n;
 FILE *quelle,*ziel;
 char puffer[MAX]; //1024 Bytes = 1KB
 clock_t start,stop;
 char dateilesen[20],byteweise[20],blockweise[20];

 printf("Welche Datei wollen sie verwenden zum Kopieren : ");
 scanf("%s",dateilesen);
 printf("Wie soll die Datei heißen zum Byteweise Kopieren : ");
 scanf("%s",byteweise);
 printf("Wie soll die Datei heißen zum Blockweise Kopieren: ");
 scanf("%s",blockweise);

 dateien_oeffnen(dateilesen, byteweise, &quelle, &ziel);
 start = clock();

/*Wir beginnen mit dem kopieren Byte für Byte*/
 while((c=getc(quelle)) != EOF)
 if(putc(c,ziel) == EOF)
     fprintf(stderr,"Fehler bei putc.....\n");

 stop = clock();
 fclose(quelle);
 fclose(ziel);
 fprintf(stdout, "Kopieren zeichenweise %.2f sek\n",
                  (stop-start) / CLOCKS_PER_SEC);

 dateien_oeffnen(dateilesen,blockweise, &quelle, &ziel);
 start = clock();

/*Wir kopieren Blockweise mit fwrite*/
 while((n=fread(puffer, MAX, 1, quelle)) >0)
     fwrite(puffer, MAX, 1, ziel);

 stop = clock();
 fclose(quelle);
 fclose(ziel);
 fprintf(stdout,"Kopieren blockweise %.2f sek\n",
                 (stop-start)/CLOCKS_PER_SEC);

 return 0;
}

