#include <stdio.h> // <cstdio> en C++
int fgetpos( FILE * stream, fpos_t * pos );
Cette fonction permet de récupérer la position courante de la tête de lecture sur un fichier (ou plus généralement la position courante dans un flux).
fgetpos
et fsetpos
,
serait d'utiliser les fonctions ftell
et fseek
.
fpos_t
) devant recevoir la position courante.
Cette fonction renvoit la valeur 0
si tout se passe bien.
Dans le cas contraire, la fonction renvoit -1
et la variable globale errno
contient
alors le code d'erreur.
EBADF : le descripteur de flux (FILE *
) passé en paramètre est invalide.
Voici un exemple de code qui relit deux fois le début d'un fichier avant de lire la suite du programme.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include <stdio.h> #include <stdlib.h> #include <string.h> // Une fonction qui lit les cinq caractères suivants dans un fichier. void readAndDisplayFiveLetters(FILE * file) { // On initialise un buffer pour recevoir les lettres. char buffer[6]; // +1 pour le \0 terminal memset(buffer, '\0', 6); // On lit et on affiche les cinqs lettres. fread(buffer, 1, 5, file); puts(buffer); } int main(void) { // On créer un fichier de départ qu'on va lire par la suite. FILE * file = fopen("data.txt", "w"); fprintf(file, "Hello World!\n"); fclose(file); // On tente maintenant de lire le fichier, en mémorisant la position de départ. file = fopen("data.txt", "r"); fpos_t pos; if ( fgetpos(file, &pos) != 0 ) { fprintf(stderr, "Cannot access to the file position"); fclose(file); exit(EXIT_FAILURE); } // On lit le mot Hello readAndDisplayFiveLetters(file); // On se replace au début du fichier if ( fsetpos(file, &pos) != 0 ) { fprintf(stderr, "Cannot change the file position"); fclose(file); exit(EXIT_FAILURE); } // On relit le mot Hello, puis le blanc puis World readAndDisplayFiveLetters(file); fgetc(file); readAndDisplayFiveLetters(file); // On ferme le fichier fclose(file); return EXIT_SUCCESS; } |
Et voici les résultats affichés par ce programme.
Hello Hello World
C89 / C99 / C11 / C18
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :