ftell
, _ftelli64
Получает текущее положение указателя файла.
Синтаксис
long ftell(
FILE *stream
);
__int64 _ftelli64(
FILE *stream
);
Параметры
stream
Целевая структура FILE
.
Возвращаемое значение
Функции ftell
и _ftelli64
возвращают текущее положение в файле. Значение, возвращаемое ftell
и _ftelli64
не отражает смещение физического байта для потоков, открытых в текстовом режиме, так как текстовый режим приводит к переводу канала возвращаемой строки каретки. Используйте ftell
или _ftelli64
с fseek
ним_fseeki64
, чтобы правильно вернуться к расположениям файлов. При ошибке ftell
и _ftelli64
вызове обработчика недопустимых параметров, как описано в разделе "Проверка параметров". Если выполнение разрешено продолжать, эти функции возвращают -1L и задаются errno
в качестве одной из двух констант, определенных в ERRNO.H
. Константа EBADF
означает, что stream
аргумент не является допустимым значением указателя файла или не ссылается на открытый файл. Константа EINVAL
означает, что функции передан недопустимый аргумент stream
. На устройствах, не способных искать (например, терминалы и принтеры) или когда stream
не ссылается на открытый файл, возвращаемое значение не определено.
Дополнительные сведения о кодах возврата см. в разделе errno
, _doserrno
_sys_errlist
и _sys_nerr
.
Замечания
_ftelli64
Функции ftell
извлекают текущую позицию указателя файла (если таковые связаны).stream
Позиция представляется как смещение относительно начала потока.
Когда файл открыт для добавления данных, текущая позиция в файле определяется последней операцией ввода-вывода, а не тем, где должна произойти следующая запись. Например, предположим, что файл открыт для добавления, а последняя операция была прочитана. Позиция файла — это точка, в которой начнется следующая операция чтения, а не то, где начнется следующая запись. (Когда файл открыт для добавления, позиция файла перемещается в конец файла перед любой операцией записи.) Если операции ввода-вывода еще не произошли в файле, открытом для добавления, позиция файла — начало файла.
В текстовом режиме при вводе CTRL+Z интерпретируется как символ конца файла. В файлах, открытых для чтения/записи, функция fopen
и все связанные с ней подпрограммы проверяют наличие символа CTRL+Z в конце файла и удаляют его, если это возможно. Это связано с тем, что при использовании сочетания ftell
и fseek
(или_ftelli64
) _fseeki64
перемещение в файл, заканчивающийся сочетанием КЛАВИШ CTRL+Z, _ftelli64
может привести ftell
к неправильному ведении в конце файла.
Во время выполнения функция блокирует вызывающий поток, поэтому она потокобезопасна. Сведения о неблокирующей версии см. в описании функции _ftell_nolock
.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Function | Обязательный заголовок | Необязательные заголовки |
---|---|---|
ftell |
<stdio.h> |
<errno.h> |
_ftelli64 |
<stdio.h> |
<errno.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// 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
См. также
Потоковый ввод-вывод
fopen
, _wfopen
fgetpos
fseek
, _fseeki64
_lseek
, _lseeki64