Namespaces
Variants

fsetpos

From cppreference.net
< c ‎ | io
Défini dans l'en-tête <stdio.h>
int fsetpos ( FILE * stream, const fpos_t * pos ) ;

Définit l'indicateur de position du fichier et l'état d'analyse multioctet (le cas échéant) pour le flux de fichier stream selon la valeur pointée par pos .

En plus d'établir un nouvel état d'analyse et une nouvelle position, un appel à cette fonction annule les effets de ungetc et efface l'état de fin de fichier, s'il est défini.

Si une erreur de lecture ou d'écriture se produit, l'indicateur d'erreur ( ferror ) du flux est défini.

Table des matières

Paramètres

stream - flux de fichier à modifier
pos - pointeur vers un fpos_t objet à utiliser comme nouvelle valeur de l'indicateur de position de fichier

Valeur de retour

0 en cas de succès, valeur non nulle sinon.

Notes

Après s'être positionné à une position non finale dans un flux large, le prochain appel à toute fonction de sortie peut rendre le reste du fichier indéfini, par exemple en produisant une séquence multioctet de longueur différente.

Exemple

fsetpos avec vérification d'erreur

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    // Préparer un tableau de valeurs FP (virgule flottante).
    #define SIZE 5
    double A[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0};
    // Écrire le tableau dans un fichier.
    FILE * fp = fopen("test.bin", "wb");
    fwrite(A,sizeof(double),SIZE,fp);
    fclose (fp);
    // Lire les valeurs FP dans le tableau B.
    double B[SIZE];
    fp = fopen("test.bin","rb");
    fpos_t pos;
    if (fgetpos(fp, &pos)) // position actuelle : début du fichier
    {
        perror("fgetpos()");
        fprintf(stderr, "fgetpos() a échoué dans le fichier %s à la ligne # %d\n",
                __FILE__, __LINE__ - 3);
        exit(EXIT_FAILURE);
    }
    int ret_code = fread(B,sizeof(double),1,fp); // lire une valeur FP
    // position actuelle : après lecture d'une valeur v-f
    printf("%.1f; compteur de lecture = %d\n", B[0], ret_code); // afficher une valeur FP et ret_code
    if (fsetpos(fp, &pos)) // réinitialiser la position actuelle au début du fichier
    {
        if (ferror(fp))
        {
            perror("fsetpos()");
            fprintf(stderr, "fsetpos() a échoué dans le fichier %s à la ligne # %d\n", __FILE__,
                    __LINE__ - 5);
            exit(EXIT_FAILURE);
        }
    }
    ret_code = fread(B, sizeof(double), 1, fp); // relire la première valeur FP
    printf("%.1f; compteur de lecture = %d\n", B[0], ret_code); // afficher une valeur FP et ret_code
    fclose(fp);
    return EXIT_SUCCESS;
}

Sortie possible :

1.0; read count = 1
1.0; read count = 1

Références

  • Norme C23 (ISO/IEC 9899:2024) :
  • 7.21.9.3 La fonction fsetpos (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.21.9.3 La fonction fsetpos (p: TBD)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.21.9.3 La fonction fsetpos (p: 337)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.19.9.3 La fonction fsetpos (p: 303)
  • Norme C89/C90 (ISO/CEI 9899:1990) :
  • 4.9.9.3 La fonction fsetpos

Voir aussi

obtient l'indicateur de position du fichier
(fonction)
retourne l'indicateur de position actuel du fichier
(fonction)
déplace l'indicateur de position du fichier vers un emplacement spécifique
(fonction)
documentation C++ pour fsetpos