fsetpos
|
Definiert in Header
<stdio.h>
|
||
Setzt den Dateipositionsanzeiger und den Multibyte-Parsing-Zustand (falls vorhanden) für den Dateistrom stream gemäß dem Wert, auf den pos zeigt.
Neben der Einrichtung eines neuen Analysezustands und einer neuen Position macht ein Aufruf dieser Funktion die Auswirkungen von ungetc rückgängig und löscht den End-of-File-Zustand, falls dieser gesetzt ist.
Wenn ein Lese- oder Schreibfehler auftritt, wird das Fehlerindikator ( ferror ) für den Stream gesetzt.
Inhaltsverzeichnis |
Parameter
| stream | - | Dateistrom, der zu ändern ist |
| pos | - | Zeiger auf ein fpos_t Objekt, das als neuer Wert der Dateipositionsanzeige verwendet werden soll |
Rückgabewert
0 bei Erfolg, andernfalls ein Wert ungleich Null.
Hinweise
Nach dem Positionieren an einer Nicht-End-Position in einem breiten Stream kann der nächste Aufruf einer Ausgabefunktion den Rest der Datei undefiniert machen, z.B. durch Ausgeben einer Multibyte-Sequenz mit einer anderen Länge.
Beispiel
fsetpos
mit Fehlerüberprüfung
#include <stdio.h> #include <stdlib.h> int main(void) { // Bereite ein Array von FP-Werten (Fließkommawerten) vor. #define SIZE 5 double A[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0}; // Schreibe Array in eine Datei. FILE * fp = fopen("test.bin", "wb"); fwrite(A,sizeof(double),SIZE,fp); fclose (fp); // Lese die FP-Werte in Array B ein. double B[SIZE]; fp = fopen("test.bin","rb"); fpos_t pos; if (fgetpos(fp, &pos)) // aktuelle Position: Anfang der Datei { perror("fgetpos()"); fprintf(stderr, "fgetpos() failed in file %s at line # %d\n", __FILE__, __LINE__ - 3); exit(EXIT_FAILURE); } int ret_code = fread(B,sizeof(double),1,fp); // lese einen FP-Wert // aktuelle Position: nach dem Lesen eines FP-Werts printf("%.1f; read count = %d\n", B[0], ret_code); // gebe einen FP-Wert und ret_code aus if (fsetpos(fp, &pos)) // setze aktuelle Position auf Anfang der Datei zurück { if (ferror(fp)) { perror("fsetpos()"); fprintf(stderr, "fsetpos() failed in file %s at line # %d\n", __FILE__, __LINE__ - 5); exit(EXIT_FAILURE); } } ret_code = fread(B, sizeof(double), 1, fp); // lese ersten FP-Wert erneut printf("%.1f; read count = %d\n", B[0], ret_code); // gebe einen FP-Wert und ret_code aus fclose(fp); return EXIT_SUCCESS; }
Mögliche Ausgabe:
1.0; read count = 1 1.0; read count = 1
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.21.9.3 Die fsetpos-Funktion (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.21.9.3 Die fsetpos-Funktion (S.: TBD)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.21.9.3 Die fsetpos-Funktion (S: 337)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.19.9.3 Die fsetpos-Funktion (S: 303)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 4.9.9.3 Die fsetpos-Funktion
Siehe auch
|
ruft die Dateipositionsanzeige ab
(Funktion) |
|
|
gibt die aktuelle Dateipositionsanzeige zurück
(Funktion) |
|
|
bewegt die Dateipositionsanzeige zu einer bestimmten Position in einer Datei
(Funktion) |
|
|
C++-Dokumentation
für
fsetpos
|
|