#include <stdio.h>
#include <stdlib.h>

int main()
{
 FILE *quelle,*fehler;
 int c,ausw;
 char datei[20];
 long pos=0;

 printf("Welche Datei wollen sie oeffnen : ");
 scanf("%s",datei);
 fflush(stdin);

 if((quelle=fopen(datei,"a+")) == NULL)
  {
   if((fehler=fopen("fehler.log","a+")) != NULL)
    {
     fprintf(fehler,"Datei %s ließ sich nicht oeffnen\n",datei);
      fprintf(stderr,"Konnte %s nicht oeffnen\n",datei);       exit(0);
    }
   fprintf(stderr,"Konnte %s nicht oeffnen\n",datei);
   exit(1);
  }

/*Das Zeichen '*' soll das Ende unsere Eingabe markieren*/
 printf("Eingabe machen und mit '*' beenden\n");
 while((c=getc(stdin)) != '*')
    putc(c,quelle);

/*Wir setzen den Zeiger quelle an den Anfang der Datei*/
 fseek(quelle, 0L, SEEK_SET);

/*Wir geben die ganze Datei auf dem Bildschirm aus*/
 printf("\nAusgabe der kompletten Datei : \n");
 while((c=getc(quelle)) != EOF)
     putc(c,stdout);

/*Zur Demonstration gehen wir von der aktuellen Position*/
/*10 Zeichen zurück und geben die letzten 10 Zeichen aus*/
 printf("\nDie letzten 10 Zeichen : ");
 fseek(quelle, -10L, SEEK_CUR);
 while((c=getc(quelle)) != EOF)
    putc(c,stdout);

/*Wir legen selbst fest wie viel Zeichen wir vom Start aus*/
/*einrücken wollen.*/
 printf("\nWieviele Stellen vom Start aus wollen sie einrücken : ");
 scanf("%ld",&pos);
 fflush(stdin);

 fseek(quelle, 0L, SEEK_SET);
 fseek(quelle, pos,SEEK_CUR);

 printf("-1- Lesen\n");
 printf("-2- Schreiben\n");
 printf("\nAuswahl: ");
 scanf("%d",&ausw);
 fflush(stdin);

 if(ausw==1)
 {
  while((c=getc(quelle)) != EOF)
    putc(c,stdout);
 }

/*Wird trotzdem immer ans Ende geschrieben wegen dem Modus a+*/
 else if(ausw==2)
  {
   while((c=getc(stdin)) != '*')
       putc(c,quelle);
  }
 else
    fprintf(stderr,"Falsche Eingabe!!\n");

 return 0;
}
