ftell
, _ftelli64
Získá aktuální pozici ukazatele souboru.
Syntaxe
long ftell(
FILE *stream
);
__int64 _ftelli64(
FILE *stream
);
Parametry
stream
Cílová FILE
struktura
Vrácená hodnota
ftell
a _ftelli64
vrátí aktuální pozici souboru. Hodnota vrácená ftell
a _ftelli64
nemusí odrážet fyzický posun bajtů datových proudů otevřených v textovém režimu, protože textový režim způsobuje překlad návratového řádku řádku. Použijte ftell
s fseek
nebo _ftelli64
s _fseeki64
k tomu, abyste se vrátili do umístění souborů správně. Při chybě ftell
a _ftelli64
vyvolání neplatné obslužné rutiny parametru, jak je popsáno v ověření parametru. Pokud je provádění povoleno pokračovat, tyto funkce vrátí -1L a nastaví errno
na jednu ze dvou konstant definovaných v ERRNO.H
. Konstanta EBADF
znamená stream
, že argument není platná hodnota ukazatele souboru nebo neodkazuje na otevřený soubor. EINVAL
znamená, že funkci byl předán neplatný stream
argument. Na zařízeních, která nemohou hledat (například terminály a tiskárny), nebo pokud stream
neodkazuje na otevřený soubor, návratová hodnota není definována.
Další informace o návratových kódech naleznete v tématu errno
, _doserrno
, _sys_errlist
a _sys_nerr
.
Poznámky
_ftelli64
Funkce ftell
načítají aktuální pozici ukazatele souboru (pokud existuje) přidruženého stream
. Pozice je vyjádřena jako posun vzhledem k začátku datového proudu.
Při otevření souboru pro připojení dat je aktuální pozice souboru určena poslední vstupně-výstupní operací, nikoli umístěním dalšího zápisu. Předpokládejme například, že je soubor otevřen pro připojení a poslední operace byla přečtená. Umístění souboru je bod, kde by se spustila další operace čtení, a ne místo, kde by se spustil další zápis. (Při otevření souboru pro připojení se pozice souboru před jakoukoli operací zápisu přesune na konec souboru.) Pokud u souboru otevřeného pro připojení ještě nedošlo k žádné vstupně-výstupní operaci, pozice souboru je začátek souboru.
V textovém režimu se kombinace kláves CTRL+Z při zadávání interpretuje jako znak konce souboru. V souborech otevřených pro čtení a zápis fopen
a všechny související rutiny kontrolují ctrl+Z na konci souboru a pokud je to možné, odeberte ho. Je to proto, že se pomocí kombinace ftell
a fseek
nebo _ftelli64
a a _fseeki64
) přesunu v souboru, který končí klávesou CTRL+Z, může způsobit ftell
nebo _ftelli64
se chovat nesprávně blízko konce souboru.
Tato funkce uzamkne volající vlákno během provádění a je proto bezpečné pro přístup z více vláken. Informace o nezamykání verze najdete v tématu _ftell_nolock
.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Function | Požadovaný hlavičkový soubor | Volitelná záhlaví |
---|---|---|
ftell |
<stdio.h> |
<errno.h> |
_ftelli64 |
<stdio.h> |
<errno.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// 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
Viz také
Vstupně-výstupní operace streamu
fopen
, _wfopen
fgetpos
fseek
, _fseeki64
_lseek
, _lseeki64