C ftell 함수 파일의 읽기·쓰기 위치 구하기
파일의 읽기/쓰기 위치를 알려 줍니다.
- 헤더: stdio.h
- 형태: long ftell( FILE *stream)
- 인수: FILE *stream 대상 파일 스트림
- 반환: long 읽기/쓰기 위치를 반환, 오류가 발생하면 -1을 반환
파일을 열기 후에는 읽기/쓰기 위치는 0부터 시작됩니다. 그러나 잘못된 예제를 작성하면 엉뚱한 값으로 오해하게 됩니다. 즉, 아래는 잘못된 예제입니다. 왜냐하면, C 에서는 인수에 들어있는 함수의 수행은 오른쪽에서부터 먼저 실행하고 하기 때문에 주의해야 합니다.
#include <stdio.h>
int main( void)
{
FILE *fp;
char chr_byte;
int ndx;
fp = fopen( "./test.c", "r");
for ( ndx = 0; ndx < 5; ndx++){
printf( "pointer = %ld char = %c\n", ftell( fp), fgetc( fp));
}
fclose( fp);
return 0;
}
잘못된 예제로 실행해 보면 결과는 아래와 같습니다.
]$ ./a.out
pointer = 1 char = # <- 두 번째 위치( 1 )에 '#' 문자가 출력
pointer = 2 char = i
pointer = 3 char = n
pointer = 4 char = c
pointer = 5 char = l
]$
이렇게 보면 첫 번째 문자 위치가 1 인것으로 착각할 수 있으므로 주의해야 합니다. 파일의 시작 위치에서 ftell() 값은 0입니다. 그럼에도 첫 번째 문자 '#'에 1이 나온 이유는 C언어의 인수 전달 순서가 뒤에서부터 전송하는 특성 때문입니다.즉, printf()의 인수 중 fgetc()가 먼저 실행한 후에 ftell()이 실행됩니다. 정확한 예제는 아래의 예제를 참고하세요.
C언어 ftell 함수 예제
#include <stdio.h>
int main( void)
{
FILE *fp;
char chr_byte;
int ndx;
fp = fopen( "./test.c", "r");
for ( ndx = 0; ndx < 5; ndx++){
printf( "pointer = %ld", ftell( fp)); // ftell()을 먼저 실행
printf( " ");
printf( "char = %c\n" , fgetc( fp));
}
fclose( fp);
return 0;
}
C언어 ftell 함수 예제 실행 결과
]$ ./a.out
pointer = 0 char = # <- 첫 번째 위치( 0 )에 '#' 문자가 출력
pointer = 1 char = i
pointer = 2 char = n
pointer = 3 char = c
pointer = 4 char = l
]$
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 rewind 함수 파일 읽기·쓰기 위치 초기화 (2) | 2020.03.13 |
---|---|
C언어 clearerr 함수 파일 오류 정보 초기화 (0) | 2020.03.13 |
C언어 ferror 함수 파일 오류 유무 확인 (0) | 2020.03.13 |