fseek
, _fseeki64
Przenosi wskaźnik pliku do określonej lokalizacji.
Składnia
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Parametry
stream
Wskaźnik do FILE
struktury.
offset
Liczba bajtów z origin
.
origin
Pozycja początkowa.
Wartość zwracana
W przypadku powodzenia fseek
i _fseeki64
zwraca wartość 0. W przeciwnym razie zwraca wartość niezerową. Na urządzeniach, których nie można szukać, wartość zwracana jest niezdefiniowana. Jeśli stream
jest wskaźnikiem o wartości null lub jeśli origin
nie jest jedną z dozwolonych wartości opisanych poniżej, fseek
i _fseeki64
wywołaj nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonanie może kontynuować, te funkcje są ustawione errno
na EINVAL
wartość i zwracają wartość -1.
Uwagi
Funkcje fseek
i _fseeki64
przenoszą wskaźnik pliku (jeśli istnieje) skojarzony z nową lokalizacją stream
, która jest offset
bajtami z origin
. Kolejna operacja na strumieniu odbywa się w nowej lokalizacji. W strumieniu otwartym na potrzeby aktualizacji następną operacją może być odczyt lub zapis. Argument origin
musi być jedną z następujących stałych zdefiniowanych w pliku STDIO.H
:
wartość źródła | Znaczenie |
---|---|
SEEK_CUR |
Bieżąca pozycja wskaźnika pliku. |
SEEK_END |
Koniec pliku. |
SEEK_SET |
Początek pliku. |
Możesz użyć polecenia fseek
i _fseeki64
zmienić położenie wskaźnika w dowolnym miejscu w pliku. Wskaźnik można również umieścić poza końcem pliku. fseek
i czyści wskaźnik końca pliku i _fseeki64
neguje efekt wszelkich wcześniejszych ungetc
wywołań względem stream
elementu .
Po otwarciu pliku do dołączania danych bieżąca pozycja pliku jest określana przez ostatnią operację we/wy, a nie przez miejsce następnego zapisu. Jeśli w pliku otwartym do dołączania nie wystąpiła jeszcze żadna operacja we/wy, pozycja pliku jest początkiem pliku.
W przypadku strumieni otwartych w trybie fseek
tekstowym i _fseeki64
mają ograniczone użycie, ponieważ translacje zestawienia powrotu karetki mogą powodować fseek
i _fseeki64
powodować nieoczekiwane wyniki. Jedynymi fseek
operacjami i _fseeki64
gwarantowanymi do pracy ze strumieniami otwartymi w trybie tekstowym są:
Szukanie z przesunięciem 0 względem dowolnej wartości pochodzenia.
Szukanie od początku pliku z wartością przesunięcia zwróconą z wywołania do
ftell
podczas używaniafseek
lub_ftelli64
w przypadku używania ._fseeki64
Ponadto w trybie tekstowym skrót CTRL+Z jest interpretowany jako znak końca pliku w danych wejściowych. W plikach otwartych do odczytu/zapisu, fopen
a wszystkie powiązane procedury sprawdzają, czy na końcu pliku jest ctrl+Z i usuń go, jeśli to możliwe. Jest on usuwany, ponieważ użycie kombinacji fseek
elementów i i _fseeki64
i ftell
_ftelli64
, w celu przeniesienia w pliku kończącym się CTRL+Z może spowodować fseek
nieprawidłowe zachowanie lub _fseeki64
zachowanie na końcu pliku.
Gdy CRT otwiera plik rozpoczynający się od znaku order mark bajtów (BOM), wskaźnik pliku jest umieszczony po BOM. (Oznacza to, że jest on umieszczony na początku rzeczywistej zawartości pliku). Jeśli musisz przejść fseek
do początku pliku, użyj polecenia ftell
, aby uzyskać pozycję początkową, a następnie do tej pozycji, a nie fseek
do pozycji 0.
Ta funkcja blokuje inne wątki podczas wykonywania i dlatego jest bezpieczna wątkowo. Aby uzyskać wersję nieblokającą, zobacz _fseek_nolock
_fseeki64_nolock
, .
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Wymagania
Function | Wymagany nagłówek |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// 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'.
Zobacz też
We/Wy strumienia
fopen
, _wfopen
ftell
, _ftelli64
_lseek
, _lseeki64
rewind