Namespaces
Variants

fsetpos

From cppreference.net
< c ‎ | io
Definiert in Header <stdio.h>
int fsetpos ( FILE * stream, const fpos_t * pos ) ;

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