ftell

Description

Gets the current position of a file pointer.

#include <stdio.h>

long ftell( FILE *stream );

stream Target FILE structure  

Remarks

The ftell function gets the current position of the file pointer (if any) associated with stream. The position is expressed as an offset relative to the beginning of the stream.

Note that when a file is opened for appending data, the current file position is determined by the last I/O operation, not by where the next write would occur. For example, if a file is opened for an append and the last operation was a read, the file position is the point where the next read operation would start, not where the next write would start. (When a file is opened for appending, the file position is moved to end-of-file before any write operation.) If no I/O operation has yet occurred on a file opened for appending, the file position is the beginning of the file.

Return Value

The ftell function returns the current file position. The value returned by ftell may not reflect the physical byte offset for streams opened in text mode, since text mode causes carriage-return–line-feed translation. Use ftell in conjunction with the fseek function to return to file locations correctly. On error, the function returns –1L and errno is set to one of the following constants, defined in ERRNO.H:

Constant Description

EBADF Bad file number. The stream argument is not a valid file-handle value or does not refer to an open file.
EINVAL Invalid argument. An invalid stream argument was passed to the function.

On devices incapable of seeking (such as terminals and printers), or when stream does not refer to an open file, the return value is undefined.

Compatibility

Standards:ANSI, UNIX

16-Bit:DOS, QWIN, WIN, WIN DLL

32-Bit:DOS32X

See Also

fgetpos, fseek, _lseek, _tell

Example

/* FTELL.C: This program opens a file named 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;

void main( void )

{

long position;

char list[100];

if( (stream = fopen( "ftell.c", "rb" )) != NULL )

{

/* 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 );

}

}

Output

Position after trying to read 100 bytes: 100