Udostępnij za pośrednictwem


ftell, _ftelli64

Pobiera bieżącą pozycję wskaźnika pliku.

Składnia

long ftell(
   FILE *stream
);
__int64 _ftelli64(
   FILE *stream
);

Parametry

stream
Struktura docelowa FILE .

Wartość zwracana

ftell i _ftelli64 zwróć bieżącą pozycję pliku. Wartość zwracana przez ftell element i _ftelli64 może nie odzwierciedlać fizycznego przesunięcia bajtów dla strumieni otwartych w trybie tekstowym, ponieważ tryb tekstowy powoduje tłumaczenie źródła danych powrotu karetki. Użyj polecenia ftell z poleceniem fseek lub _ftelli64 , _fseeki64 aby wrócić do lokalizacji plików poprawnie. W przypadku błędu ftell i _ftelli64 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 zwracają wartość -1L i ustawiają errno jedną z dwóch stałych zdefiniowanych w elemecie ERRNO.H. Stała EBADF oznacza, stream że argument nie jest prawidłową wartością wskaźnika pliku lub nie odwołuje się do otwartego pliku. EINVAL oznacza, że do funkcji przekazano nieprawidłowy stream argument. Na urządzeniach, które nie mogą szukać (takich jak terminale i drukarki) lub gdy stream nie odwołują się do otwartego pliku, wartość zwracana jest niezdefiniowana.

Aby uzyskać więcej informacji na temat kodów zwracanych, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Funkcje ftell i _ftelli64 pobierają bieżącą pozycję wskaźnika pliku (jeśli istnieje) skojarzonego z elementem stream. Pozycja jest wyrażana jako przesunięcie względem początku strumienia.

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. Załóżmy na przykład, że plik jest otwarty dla dołączania, a ostatnia operacja była odczytem. Położenie pliku to punkt, w którym rozpocznie się następna operacja odczytu, a nie miejsce rozpoczęcia następnego zapisu. (Po otwarciu pliku do dołączania pozycja pliku jest przenoszona na koniec pliku przed dowolną operacją 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 trybie tekstowym 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 to spowodowane tym, że użycie kombinacji ftell elementów i , fseeklub _ftelli64 i _fseeki64w celu przeniesienia w pliku kończącym się CTRL+Z może spowodować ftell nieprawidłowe zachowanie lub _ftelli64 zachowanie na końcu pliku.

Ta funkcja blokuje wątek wywołujący podczas wykonywania i dlatego jest bezpieczny wątkowo. Aby uzyskać wersję nieblokającą, zobacz _ftell_nolock.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Function Wymagany nagłówek Opcjonalne nagłówki
ftell <stdio.h> <errno.h>
_ftelli64 <stdio.h> <errno.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// crt_ftell.c
// This program opens a file named CRT_FTELL.C
// for reading and tries to read 100 characters. It
// then uses ftell to determine the position of the
// file pointer and displays this position.

#include <stdio.h>

FILE *stream;

int main( void )
{
   long position;
   char list[100];
   if( fopen_s( &stream, "crt_ftell.c", "rb" ) == 0 )
   {
      // Move the pointer by reading data:
      fread( list, sizeof( char ), 100, stream );
      // Get position after read:
      position = ftell( stream );
      printf( "Position after trying to read 100 bytes: %ld\n",
              position );
      fclose( stream );
   }
}
Position after trying to read 100 bytes: 100

Zobacz też

We/Wy strumienia
fopen, _wfopen
fgetpos
fseek, _fseeki64
_lseek, _lseeki64