ftell() – ftello() — 현재 위치 얻기

형식

#include <stdio.h>
long int ftell(FILE *stream);
off_t ftello(FILE *stream);

언어 레벨

ANSI

스레드세이프

통합 파일 시스템 인터페이스

SYSIFCOPT(*NOIFSIO)가 컴파일 명령에서 지정되면 ftello() 함수는 사용할 수 없습니다.

설명

ftell()ftello() 함수는 stream 과 연관된 파일의 현재 위치를 찾습니다. 고정 길이 2진 파일의 경우, 리턴된 값은 stream의 시작과 관련된 오프셋입니다.

QSYS 라이브러리 시스템의 파일의 경우, ftell()ftello() 함수는 고정 형식 2진 파일에 대해 상대 값을 리턴하며 기타 파일 형식에 대해 인코딩된 값을 리턴합니다. 이 인코딩된 값은 fseek()fseeko() 함수에 대한 호출에 사용되어 파일 시작 이외의 부분에 위치 지정되어야 합니다.

리턴값

ftell()ftello() 함수는 현재 파일 위치를 리턴합니다. 오류 시 ftell()ftello()–1, cast to longoff_t를 각각 리턴하며 errno를 0(영)이 아닌 값으로 설정합니다.

errno의 값은 다음으로 설정될 수 있습니다.
의미
ENODEV
연산이 잘못된 장치에서 시도되었습니다.
ENOTOPEN
파일이 열려 있지 않습니다.
ENUMMBRS
파일은 다중 멤버 처리를 위해 열려 있습니다.
ENUMRECS
레코드가 너무 많습니다.
ERECIO
파일이 레코드 I/O에 대해 열려 있습니다.
ESTDERR
stderr을 열 수 없습니다.
ESTDIN
stdin을 열 수 없습니다.
ESTDOUT
stdout를 열 수 없습니다.
EIOERROR
회복 불가능한 I/O 오류가 발생했습니다.
EIORECERR
회복 가능한 I/O 오류가 발생했습니다.

ftell()ftello() 함수는 type=record로 열린 파일에 대해 지원되지 않습니다.

이 예는 읽기 위해 파일 mylib/myfile을 엽니다. 버퍼의 반을 채울 정도로 충분한 문자를 읽고 스트림과 버퍼의 위치를 출력합니다.
#include  <stdio.h>
 
#define NUM_ALPHA  26
#define NUM_CHAR    6
 
int main(void)
{
  FILE * stream;
  int i;
  char ch;
 
  char buffer[NUM_ALPHA];
  long position;
 
  if (( stream = fopen("mylib/myfile", "r")) != NULL )
  {
    /* read into buffer */
    for ( i = 0; ( i  < NUM_ALPHA/2 ) && ((buffer[i] = fgetc(stream)) != EOF ); ++i )
        if (i==NUM_CHAR-1)  /* We want to be able to position the */
                            /* file pointer to the character in   */
                            /* position NUM_CHAR                  */
           position = ftell(stream);
 
    buffer[i] = '\0';
  }
  printf("Current file position is %d\n", position); 
  printf("Buffer contains: %s\n", buffer);
}