ein Kapitel zurück                                           ein Kapitel weiter

Nun gibt es außer fseek und ftell noch eine andere Möglichkeit zum Positionieren des Dateizeigers in einer Datei. Wobei diese beiden Funktionen in vielen Büchern über C gar nicht mehr erklärt werden da man mit fseek und ftell Dasselbe erreicht. Hier der Syntax der beiden Funktionen...

int fsetpos(FILE *datei, const fpos_t *pos);
int fgetpos(FILE *datei, fpos_t *pos);

Mit fsetpos setzen sie den Schreib-/Lesezeiger FILE *datei auf den Wert auf den pos zeigt. Die "Variable" fpos_t ist ein sogenannter Primitiver Systemdatentyp. Der Wert den sie für pos übergeben wollen sollten sie mit dem Aufruf der Funktion fgetpos ermitteln. Hierzu nun ein Beispiel...

/*Download:fpos.c*/
#include <stdio.h> #include <stdlib.h> int main() { FILE *quelle; int c; char datei[20]; fpos_t pos; printf("Welche Datei wollen sie oeffnen : "); scanf("%s",datei); fflush(stdin); if((quelle=fopen(datei,"r")) == NULL) { fprintf(stderr,"Konnte %s nicht oeffnen!!\n",datei); exit (0); } /*Wir lesen die Aktuelle Position unseren FILE - Zeigers*/ fgetpos(quelle,&pos); printf("Der Positionszeiger zeigt auf Byte : %ld\n",pos); while((c=getc(quelle)) != EOF) putc(c,stdout); printf("Groesse der Datei= Byte : %ld\n",ftell(quelle)); /*Wir setzen den FILE - Zeiger wieder zum Anfang der Datei*/ fsetpos(quelle,&pos); printf("Wir sind wieder an Position %ld\n",pos); return 0; }

Wir öffnen wieder eine Datei zum lesen. Anschließend lesen wir mittels...

fgetpos(quelle,&pos);

...die aktuelle Position unseres FILE - Zeiger quelle aus. Die Position steht anschließend dem zu Beginn des Programms festgelegten Datentyps...

fpos_t pos;

Den Wert übergeben wir mit dem Adressoperator(&) in der Funktion fgetpos an pos. Anschließend lesen wir die Datei und geben deren Größe in Bytes aus. Anschließend benutzen wir die Funktion fsetpos um den FILE - Zeiger wieder an den Anfang der Datei zu setzten...

fsetpos(quelle,&pos);

Auch hier übergeben wir wieder mittels dem Adressoperator die Adresse auf den unser Positionierzeiger pos zeigt. Dies hätten wir natürlich einfacher mit...

rewind(quelle);

...erreicht. Richtig eingesetzt sind diese beide Funktionen recht nützlich wenn sie sich z.B. eine bestimmte Position in Ihrer Datei merken wollen um später wieder darauf zurückzuspringen.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf