fseek, _fseeki64

Verschiebt den Dateizeiger in einen angegebenen Speicherort

Syntax

int fseek(
   FILE *stream,
   long offset,
   int origin
);
int _fseeki64(
   FILE *stream,
   __int64 offset,
   int origin
);

Parameter

stream
Zeiger zur FILE -Struktur.

offset
Anzahl der Bytes aus origin

origin
Ursprüngliche Position.

Rückgabewert

fseek und _fseeki64 geben bei Erfolg 0 zurück. Andernfalls gibt es einen Wert ungleich 0 (null) zurück. Auf Geräten, die Suchvorgänge nicht unterstützen, ist der Rückgabewert nicht definiert. Wenn stream es sich um einen Nullzeiger handelt oder es origin sich nicht um einen der unten beschriebenen zulässigen Werte handelt, fseek und _fseeki64 rufen Sie den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, stellen diese Funktionen errno auf EINVAL ein und geben -1 zurück.

Hinweise

Mit fseek den Funktionen wird _fseeki64 der Dateizeiger (falls vorhanden) stream an einen neuen Speicherort verschoben, offset von dem Bytes stammen origin. Der nächste Vorgang im Stream tritt am neuen Speicherort auf. Für einen updatebereiten Stream kann der nächste Vorgang ein Lese- oder Schreibvorgang sein. Das Argument origin muss eine der folgenden Konstanten sein, die in STDIO.H:

Origin-Wert Bedeutung
SEEK_CUR Aktuelle Position des Dateizeigers
SEEK_END Ende der Datei
SEEK_SET Anfang der Datei

Sie können fseek und _fseeki64 verwenden, um den Zeiger an einer beliebigen Stelle in einer Datei neu zu positionieren. Der Zeiger kann auch nach dem Ende der Datei positioniert werden. fseek und _fseeki64 löscht den End-of-File-Indikator und negiert die Wirkung aller vorherigen ungetc Aufrufe gegen stream.

Wenn eine Datei zum Anfügen von Daten geöffnet wird, wird die aktuelle Dateiposition vom letzten E/A-Vorgang nicht dadurch bestimmt, wo der nächste Schreibvorgang erfolgt. Wenn noch kein E/A-Vorgang für eine zum Anhängen geöffnete Datei stattgefunden hat, ist die Dateiposition der Anfang der Datei.

Für Datenströme, die im Textmodus geöffnet wurden und fseek_fseeki64 eingeschränkt verwendet werden, da Wagenrücklauf-Zeilenvorschubübersetzungen zu unerwarteten Ergebnissen führen und _fseeki64 zu unerwarteten Ergebnissen führen fseek können. Die einzigen fseek Und _fseeki64 Vorgänge, die garantiert an Datenströmen funktionieren, die im Textmodus geöffnet wurden, sind:

  • Suchen mit einem Offset von 0 hinsichtlich der ursprünglichen Werte

  • Suchen sie vom Anfang der Datei mit einem Offsetwert, der von einem Aufruf ftell bei Verwendung fseek oder _ftelli64 bei Verwendung _fseeki64zurückgegeben wird.

Im Textmodus wird STRG+Z als ein Dateiendezeichen in der Eingabe interpretiert. In für Lese-/Schreibvorgänge geöffneten Dateien, überprüfen fopen und alle verknüpften Routinen das Dateiende auf STRG+Z und entfernt die Markierung, sofern möglich. Es wird entfernt, da die Verwendung der Kombination von fseek und oder ftell oder _ftelli64_fseeki64 , um innerhalb einer Datei zu verschieben, die mit einem STRG+Z endet, möglicherweise zu einem unsachgemäßen Verhalten am Ende der Datei führen fseek oder _fseeki64 verhalten.

Wenn das CRT eine Datei öffnet, die mit einem Byte Order Mark (BOM) beginnt, wird der Dateizeiger nach der BOM positioniert. (Das heißt, sie wird am Anfang des tatsächlichen Inhalts der Datei positioniert). Wenn Sie am Anfang der Datei müssen fseek , verwenden ftell Sie diese, um die Anfangsposition abzurufen, und dann fseek an diese Position statt an position 0.

Diese Funktion sperrt alle anderen Threads während der Ausführung und ist daher threadsicher. Eine nicht sperrende Version finden Sie unter _fseek_nolock, _fseeki64_nolock.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Anforderungen

Funktion Erforderlicher Header
fseek <stdio.h>
_fseeki64 <stdio.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

// 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'.

Siehe auch

Stream-E/A
fopen, _wfopen
ftell, _ftelli64
_lseek, _lseeki64
rewind