#include <stdio.h> // <cstdio> en C++
1 2 3 4 |
typedef struct { __off_t __pos; __mbstate_t __state; } fpos_t; |
Ce type représente une position à l'intérieur d'un flux. Une telle position peut récupérée par la fonction
fgetpos
ou modifiée via la fonction fsetpos
.
fpos_t
, fgetpos
et fsetpos
,
serait d'utiliser les fonctions ftell
et fseek
.
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 characters suivants dans un fichier. void readAndDisplayFiveLetters(FILE * file) { // On initialize 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 maitenant 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 :