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 streamelementu .

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żywania fseek 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ę klawiszem 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