fsetpos
| Definiert in Header <stdio.h> |
||
Setzt den Dateipositionierungsindikator und den Multibyte-Parsing-Status (falls vorhanden) für den Dateistrom Strom gemäß dem Wert, auf den Pos zeigt.
Neben der Einrichtung des neuen Parsing-Status und der Position macht ein Aufruf dieser Funktion die Auswirkungen von ungetc rückgängig und löscht den End-of-File-Status, falls dieser gesetzt ist.
Wenn ein Lese- oder Schreibfehler auftritt, wird der Fehlerindikator (ferror) für den Strom gesetzt.
Inhalt |
[bearbeiten] Parameter
| stream | - | Dateistream, der modifiziert werden soll |
| pos | - | Zeiger auf ein fpos_t-Objekt, das als neuer Wert des Dateipositionierungsindikators verwendet werden soll |
[bearbeiten] Rückgabewert
0 bei Erfolg, ein Wert ungleich Null bei Fehler.
[bearbeiten] Hinweise
Nach dem Springen zu einer Nicht-Ende-Position in einem breiten Stream kann der nächste Aufruf einer beliebigen Ausgabefunktion den Rest der Datei undefiniert machen, z. B. durch die Ausgabe einer Mehrbyte-Sequenz mit anderer Länge.
[bearbeiten] Beispiel
fsetpos mit Fehlerprüfung
#include <stdio.h> #include <stdlib.h> int main(void) { // Prepare an array of FP (floating-point) values. #define SIZE 5 double A[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0}; // Write array to a file. FILE * fp = fopen("test.bin", "wb"); fwrite(A,sizeof(double),SIZE,fp); fclose (fp); // Read the FP values into array B. double B[SIZE]; fp = fopen("test.bin","rb"); fpos_t pos; if (fgetpos(fp, &pos)) // current position: start of file { 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); // read one FP value // current position: after reading one f-p value printf("%.1f; read count = %d\n", B[0], ret_code); // print one FP value and ret_code if (fsetpos(fp, &pos)) // reset current position to start of file { 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); // reread first FP value printf("%.1f; read count = %d\n", B[0], ret_code); // print one FP value and ret_code fclose(fp); return EXIT_SUCCESS; }
Mögliche Ausgabe
1.0; read count = 1 1.0; read count = 1
[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.21.9.3 Die Funktion fsetpos (p: TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.21.9.3 Die Funktion fsetpos (p: TBD)
- C11-Standard (ISO/IEC 9899:2011)
- 7.21.9.3 Die Funktion fsetpos (p: 337)
- C99-Standard (ISO/IEC 9899:1999)
- 7.19.9.3 Die Funktion fsetpos (p: 303)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 4.9.9.3 Die Funktion fsetpos
[bearbeiten] Siehe auch
| holt den Dateipositionierungsindikator (Funktion) | |
| gibt den aktuellen Dateipositionierungsindikator zurück (Funktion) | |
| verschiebt den Dateipositionierungsindikator an eine bestimmte Stelle in einer Datei (Funktion) | |
| C++ Dokumentation für fsetpos
| |