fseek() : positionne un pointeur de fichier sur un flux.
rewind() : positionne un pointeur en début de fichier.
lseek() : positionne un pointeur de fichier (décrit par descipteur)
Prototype:
- int fseek( FILE *stream, long depl, int posit);
- void rewind( FILE *stream );
- long lseek( int descripteur, long depl, int posit);
dans: <stdio.>h
Description:
L'appel fseek( stream, depl, posit) place le pointeur de fichier associé au flux stream à l'emplacement situé depl octets à partir de la position indiqué par posit.
L'argument depl peut être positif, nul ou négatif.
posit doit être l'une des trois constantes symboliques définies dans stdio.h :
- SEEK_SET emplacement trouvé à partir du début du fichier (il faut depl>=0).
- SEEK_CUR emplacement trouvé à partir de la position courante du pointeur de fichier.
- SEEK_END emplacement trouvé à partir de la fin de fichier (il faut depl<=0)
fseek() élimine tout caractère inséré dans un flux d'entrée par un appel à ungetc().
L'opération suivant un appel à fseek sur un fichier ouvert en mode mise à jour peut aussi bien être une lecture qu'une écriture.
L'appel rewind( stream) place le pointeur de fichier associé au flux stream, en début de fichier.
L'appel lseek(descripteur,depl,posit) s'utilise lorsque les fichiers sont manipulés par des descripteurs (fonction niveau des appels système).
Valeur renvoyée:
Par fseek():
- 0 si déroulement correct,
- sinon une valeur non nulle est renvoyée.
Exemple d'erreur: le flux n'a pas été ouvert.
Voir aussi:
Portabilité:
système
UNIX,
DOS,
norme
ANSI.
Exemple:
#include
long filesize(FILE *stream);
int main(void) {
FILE *stream;
stream= fopen("toto","w+");
if( stream==NULL ) {
printf( "Erreur à la crétion du fichier toto !!!\n");
return 1;
}
fprintf(stream, "0123456789ABCDEF");
printf("La taille du fichier toto est %ld octets\n", filesize(stream));
return 0;
}
long filesize(FILE *stream) {
/* Renvoie la position du dernier octets du flot stream */
long curpos,length;
curpos = ftell(stream); /* garder la position courante */
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek (stream, curpos, SEEK_SET); /* restituer la position */
return length;
}