Namensräume
Varianten
Aktionen

fsetpos

Von cppreference.com
< c‎ | io
 
 
Datei-Ein-/Ausgabe
Typen und Objekte
        
Funktionen
Datei-Zugriff
(C95)
Unformatierte Ein-/Ausgabe
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Formatierte Eingabe
Direkte Ein-/Ausgabe
Formatierte Ausgabe
Dateipositionierung
fsetpos

Fehlerbehandlung
Operationen auf Dateien
 
Definiert in Header <stdio.h>
int fsetpos( FILE* Strom, const fpos_t* Pos );

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) [bearbeiten]
gibt den aktuellen Dateipositionierungsindikator zurück
(Funktion) [bearbeiten]
verschiebt den Dateipositionierungsindikator an eine bestimmte Stelle in einer Datei
(Funktion) [bearbeiten]
C++ Dokumentation für fsetpos