fseek
, _fseeki64
Déplace le pointeur de fichier vers un emplacement spécifié.
Syntaxe
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Paramètres
stream
Pointeur vers la structure FILE
.
offset
Nombre d’octets à partir de origin
.
origin
Position initiale.
Valeur retournée
En cas de réussite, fseek
et _fseeki64
retournent 0. Sinon, elles retournent une valeur différente de zéro. Sur les appareils incapables de rechercher, la valeur de retour n’est pas définie. S’il stream
s’agit d’un pointeur Null ou s’il origin
n’est pas l’une des valeurs autorisées décrites ci-dessous, fseek
et _fseeki64
appelez le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions définissent errno
avec la valeur EINVAL
et retournent -1.
Notes
Les fseek
fonctions déplacent _fseeki64
le pointeur de fichier (le cas échéant) associé stream
à un nouvel emplacement à offset
partir duquel sont des origin
octets. L’opération suivante sur le flux a lieu au nouvel emplacement. Sur un flux ouvert pour la mise à jour, l’opération suivante peut être une lecture ou une écriture. L’argument origin
doit être l’une des constantes suivantes, définies dans STDIO.H
:
valeur d’origine | Signification |
---|---|
SEEK_CUR |
Position actuelle du pointeur de fichier. |
SEEK_END |
Fin du fichier. |
SEEK_SET |
Début du fichier. |
Vous pouvez utiliser fseek
et _fseeki64
pour repositionner le pointeur n’importe où dans un fichier. Le pointeur peut également être positionné au-delà de la fin du fichier. fseek
efface _fseeki64
l’indicateur de fin de fichier et annule l’effet des appels précédents ungetc
contre stream
.
Quand un fichier est ouvert pour un ajout de données, la position de fichier actuelle est déterminée par la dernière opération d’E/S, pas par l’emplacement auquel l’écriture suivante se produirait. Si aucune opération d’E/S ne s’est produite sur un fichier ouvert pour un ajout, la position de fichier correspond au début du fichier.
Pour les flux ouverts en mode texte et _fseeki64
fseek
ont une utilisation limitée, car les traductions de flux de retour chariot peuvent provoquer fseek
et _fseeki64
produire des résultats inattendus. Les seules fseek
opérations et _fseeki64
les opérations garanties pour fonctionner sur des flux ouverts en mode texte sont les suivantes :
Recherche avec un décalage de 0 par rapport à toute valeur d’origine.
Recherche à partir du début du fichier avec une valeur de décalage retournée par un appel lors
ftell
de l’utilisationfseek
ou_ftelli64
lors de l’utilisation_fseeki64
.
Également en mode texte, Ctrl+Z est interprété comme un caractère de fin de fichier en entrée. Dans les fichiers ouverts en lecture/écriture, fopen
et toutes les routines connexes recherchent un Ctrl+Z à la fin du fichier et le suppriment, si possible. Elle est supprimée, car l’utilisation de la combinaison et fseek
ftell
ou _fseeki64
, _ftelli64
pour se déplacer dans un fichier qui se termine par une touche Ctrl+Z, peut entraîner fseek
ou _fseeki64
se comporter de manière incorrecte près de la fin du fichier.
Lorsque le CRT ouvre un fichier commençant par une marque d’ordre d’octets (BOM), le pointeur de fichier est positionné après le boM. (Autrement dit, il est positionné au début du contenu réel du fichier). Si vous devez fseek
accéder au début du fichier, utilisez-le ftell
pour obtenir la position initiale, puis fseek
vers cette position plutôt que pour la position 0.
Cette fonction verrouille les autres threads pendant l’exécution et est donc thread-safe. Pour obtenir une version non verrouillée, consultez _fseek_nolock
, _fseeki64_nolock
.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Spécifications
Fonction | En-tête requis |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// crt_fseek.c
// This program opens the file FSEEK.OUT and
// moves the pointer to the file's beginning.
#include <stdio.h>
int main( void )
{
FILE *stream;
char line[81];
int result;
if ( fopen_s( &stream, "fseek.out", "w+" ) != 0 )
{
printf( "The file fseek.out was not opened\n" );
return -1;
}
fprintf( stream, "The fseek begins here: "
"This is the file 'fseek.out'.\n" );
result = fseek( stream, 23L, SEEK_SET);
if( result )
perror( "Fseek failed" );
else
{
printf( "File pointer is set to middle of first line.\n" );
fgets( line, 80, stream );
printf( "%s", line );
}
fclose( stream );
}
File pointer is set to middle of first line.
This is the file 'fseek.out'.
Voir aussi
E/S de flux
fopen
, _wfopen
ftell
, _ftelli64
_lseek
, _lseeki64
rewind