Поделиться через


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