fseek, _fseeki64
Verschiebt den Dateizeiger für einen angegebenen Speicherort.
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Parameter
stream
Zeiger auf FILE Struktur.offset
Anzahl von Bytes aus origin.origin
Anfangsposition.
Rückgabewert
Bei Erfolg fseek und _fseeki64 , wird 0 zurückgegeben.Andernfalls wird ein Wert ungleich 0 (null) zurück.Auf den Geräten, die vom Suche werden kann, ist der Rückgabewert nicht definiert.Wenn stream ein NULL-Zeiger ist, oder wenn origin keiner der zulässigen unten beschriebenen Werten ist, rufen fseek und _fseeki64 ungültige Parameter für ein, wie in Parametervalidierungbeschrieben.Wenn die Ausführung fortgesetzt werden kann, darf dieses Features zu EINVAL und legen errno return -1.
Hinweise
fseek und _fseeki64 funktioniert Verschiebungen der Dateizeiger zugeordnet ist (sofern vorhanden) stream an einen neuen Speicherort, der offset Bytes aus originist*.* Der folgende Vorgang im Stream findet am neuen Speicherort statt.Auf einem Datenstrom, der für die Aktualisierung geöffnet ist, kann der folgende Vorgang entweder ein Lese- oder Schreibvorgang sein.Der Argument muss eine der folgenden ursprung Konstanten handeln, definiert in STDIO.H:
SEEK_CUR
Aktuelle Position des Dateizeigers.SEEK_END
Dateiende.SEEK_SET
Anfang der Datei.
Sie können fseek und _fseeki64 verwenden, um den Zeiger auf eine beliebige Stelle in einer Datei neu anzuordnen.Der Zeiger kann hinter dem Ende der Datei hinaus auch positioniert werden.fseek und _fseeki64löscht den Dateiende-Indikator und negiert den Auswirkungen aller vorherigen ungetc Aufrufe für stream.
Wenn eine Datei zum Anfügen von Daten geöffnet ist, wird die Position der aktuellen Datei vom letzten E/A-Vorgang, nicht bestimmt, wo die folgenden auftreten würden schreiben.Wenn kein E/A-Vorgang bisher für eine Datei erfolgt ist, die zum Anhängen geöffnet ist, ist die Dateiposition der Anfang der Datei.
Für die Streams, die im Textmodus geöffnet sind, haben fseek und Nutzung _fseeki64endliche, da Wagenrücklauf/Zeilenvorschub-Übersetzungen fseek und führen _fseeki64, können unerwartete Ergebnisse zu erzielen.Einzige fseek und die _fseeki64Vorgänge, die garantiert werden, um eine Verbindung mit Streams arbeiten im Textmodus geöffnet sind, sind:
Mit einem Offset von 0 in Bezug auf den ursprünglichen Werte suchen.
Die Suche am Anfang der Datei mit dem Offsetwert, das von einem Aufruf ftell zurück, als fseekoder _ftelli64beiVerwendung als_fseeki64.
Außerdem wird im Textmodus STRG+Z als Dateiende Zeichen bei der Eingabe interpretiert.In den Dateien, die für das Lesen/Schreiben geöffnet sind, fopen entfernen und alle verwandten Routinen für STRG+Z am Ende der Datei und sie, sofern dies möglich ist.Dies geschieht, weil die Anwendung möglicherweise der Kombination von fseek und ftelloder_fseeki64 und _ftelli64die Kommunikation innerhalb einer Datei, die mit STRG+Z beendet, oder _fseeki64fseek bewirkt, dass sich in der Nähe des Endes der Datei nicht ordnungsgemäß verhalten.
Wenn die CRT eine Datei geöffnet, die mit einer Bytereihenfolgenmarkierung (BOM) beginnt, wird der Dateizeiger nach BOM positioniert (also am Anfang des tatsächlichen Inhalt der Datei).Wenn Sie fseek auf den Anfang der Datei müssen, verwenden Sie ftell , die Anfangsposition und es an fseek zu gelangen, anstatt 0 zu positionieren.
Diese Funktion genügend Sperren während der Ausführung anderer Threads und daher threadsicher.Bei einer nicht sperrend - Version finden Sie unter _fseek_nolock, _fseeki64_nolock.
Anforderungen
Funktion |
Erforderlicher Header |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Um Kompatibilität zusätzlichen Informationen finden Sie unter Kompatibilität in der Einführung.
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 );
}