#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 :