16.15 Stream positionieren – »fsetpos()«, »fgetpos()« 

Neben den Funktionen fseek() und ftell() gibt es noch eine weitere Möglichkeit zum Positionieren eines Schreib-/Lesezeigers. Wobei diese beiden Funktionen häufig gar nicht mehr erwähnt werden, da sie nicht mehr bieten als fseek() und ftell(). Die Syntax der beiden Funktionen sieht so aus:
#include <stdio.h> int fsetpos(FILE *datei, const fpos_t *pos); int fgetpos(FILE *datei, fpos_t *pos);
Mit fsetpos() wird der Schreib-/Lesezeiger auf die Adresse von pos gesetzt. Die »Variable« fpos_t ist ein sogenannter primitiver Datentyp. Die Adresse, die für pos verwendet wird, sollte mit dem Aufruf der Funktion fgetpos() ermittelt werden. Hierzu ein Beispiel:
/* fpos.c */ #include <stdio.h> #include <stdlib.h> int main(void) { FILE *quelle; int c; char datei[20]; fpos_t pos; printf("Welche Datei wollen Sie oeffnen : "); scanf("%s",datei); if( (quelle=fopen(datei,"r")) == NULL) { fprintf(stderr, "Konnte %s nicht oeffnen!!\n", datei); return EXIT_FAILURE; } /* Wir lesen die aktuelle Position unseres 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 an den Anfang der Datei. */ fsetpos(quelle,&pos); printf("Wir sind wieder an Position %ld\n",pos); return EXIT_SUCCESS; }
Nachdem eine Datei zum Lesen geöffnet wurde, wird mit
fgetpos(quelle,&pos);
die aktuelle Position des FILE-Zeigers quelle ermittelt. Die Position steht anschließend in dem zu Beginn des Programms festgelegten Datentyp:
fpos_t pos;
Die Adresse wird mit dem Adressoperator (&) in der Funktion fgetpos() an pos übergeben. Danach wird die Datei ausgelesen, mitsamt der Größe in Byte. Mit
fsetpos(quelle,&pos);
wird der Stream-Zeiger wieder an den Dateianfang gesetzt. Dies hätten Sie auch mit folgender Funktion erreichen können:
rewind(quelle);
Richtig eingesetzt sind diese beiden Funktionen recht nützlich, falls eine bestimmte Position in der Datei gespeichert wird, um später wieder zu ihr zurückzuspringen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.