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_errlist
i _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 , fseek
lub _ftelli64
i _fseeki64
w 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