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 long 및 off_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);
}