ftell
, _ftelli64
Obtiene la posición actual de un puntero de archivo.
Sintaxis
long ftell(
FILE *stream
);
__int64 _ftelli64(
FILE *stream
);
Parámetros
stream
Estructura FILE
de destino.
Valor devuelto
ftell
y _ftelli64
devuelven la posición de archivo actual. Puede que los valores devueltos por ftell
y _ftelli64
no reflejen el desplazamiento físico en bytes en secuencias abiertas en modo de texto, porque el modo de texto provoca la traslación de retorno de carro–avance de línea. Use ftell
con fseek
o _ftelli64
con _fseeki64
para volver correctamente a las ubicaciones de archivo. En caso de error, ftell
e _ftelli64
invoque el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, estas funciones devuelven –1L y establecen errno
en una de dos constantes, que se definen en ERRNO.H
. La constante EBADF
indica que el argumento stream
no es un valor de puntero de archivo válido o no hace referencia a un archivo abierto. EINVAL
indica que se ha pasado un argumento stream
no válido a la función. En dispositivos que no pueden realizar búsquedas (como terminales e impresoras) o cuando stream
no hace referencia a un archivo abierto, el valor devuelto es indefinido.
Para obtener más información sobre los códigos de retorno, vea errno
, _doserrno
, _sys_errlist
y _sys_nerr
.
Comentarios
Las funciones ftell
y _ftelli64
recuperan la posición actual del puntero de archivo (si existe) que está asociado a stream
. La posición se expresa como un desplazamiento en relación con el principio del flujo.
Cuando un archivo se abre para anexar datos, la posición de archivo actual se determina con la última operación de E/S, no en función de dónde se produciría la siguiente escritura. Por ejemplo, supongamos que se abre un archivo para un anexo y la última operación fue una lectura. La posición del archivo es el punto donde se iniciaría la siguiente operación de lectura, no donde se iniciaría la siguiente escritura. (Cuando se abre un archivo para anexar, la posición del archivo se mueve al final del archivo antes de cualquier operación de escritura). Si todavía no se ha producido ninguna operación de E/S en un archivo abierto para anexar, la posición del archivo es el principio del archivo.
En modo de texto, CTRL+Z se interpreta como un carácter de final de archivo en la entrada. En archivos abiertos para lectura/escritura, fopen
y todas las rutinas relacionadas buscan un CTRL+Z al final del archivo y, si es posible, lo eliminan. Se debe a que el uso de la combinación de ftell
y fseek
, o _ftelli64
y _fseeki64
, para moverse dentro de un archivo que termina con ctrl+Z puede provocar ftell
o _ftelli64
comportarse incorrectamente cerca del final del archivo.
Esta función bloquea el subproceso de llamada durante la ejecución y por lo tanto es segura para subprocesos. Para consultar una versión que no realiza el bloqueo, vea _ftell_nolock
.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Requisitos
Función | Encabezado necesario | Encabezados opcionales |
---|---|---|
ftell |
<stdio.h> |
<errno.h> |
_ftelli64 |
<stdio.h> |
<errno.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
// 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
Vea también
E/S de secuencia
fopen
, _wfopen
fgetpos
fseek
, _fseeki64
_lseek
, _lseeki64