C언어/stdio.h

[C언어] ftell 함수 (stdio.h, 파일 크기, stream 위치 구하기)

아무일도없었다 2022. 9. 2. 23:57

사용범위

Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수

기능

C언어 표준 함수로 파일의 시작을 기준으로 stream 의 현재 오프셋을 구한다.

헤더

#include <stdio.h>

※ ftell 함수 사용시 stdio.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※


함수

long ftell(FILE* file);

파라미터

  • FILE* file
    • fopen 함수를 통해 열린 file stream을 입력한다.

반환값

성공시   파일의 시작을 기준으로 현재 파일 stream 의 offset 위치를 반환한다.
실패시   -1 을 반환한다.

잡학지식

ftell 함수는 fseek 함수와 같이 사용되는 경우가 많다.

fseek 함수의 SEEK_END 를 사용하여 파일 포인터를 파일의 끝으로 이동시킨 후 ftell 함수를 사용하여 시작기준의 offset 을 구한값이 파일의 크기이기 때문이다.

 


 

<소스 코드>

#include <stdio.h>

int main() {
    FILE *fp;
    long offset;
    int ret;

    fp = fopen("test.txt", "w");
    if (fp != NULL) {
        fprintf(fp, "abcdefghijklmnopqrstuvwxyz");
        fclose(fp);
    } else {
        // fopen 실패
    }

    fp = fopen("test.txt", "r");
    if (fp != NULL) {
        // 최초 offset
        offset = ftell(fp);
        if (offset != -1) {
            printf("First offset[%ld]\n", offset);
        } else {
            // ftell 함수 실패
        }

        // 파일의 마지막 위치(SEEK_END) 에 파일 포인터를 이동
        ret = fseek(fp, 0 ,SEEK_END);
        if (ret == 0) {
            // 파일의 마지막 위치(SEEK_END) 의 offset
            offset = ftell(fp);
            if (offset != -1) {
                printf("(File Size) Last offset[%ld]\n", offset);
            } else {
                // ftell 함수 실패
            }
        } else {
            // fseek 함수 실패
        }

        fclose(fp);
    }

    return 0;
}

 

< test.txt >

abcdefghijklmnopqrstuvwxyz

 

※ 실행 결과

First offset[0]
(File Size) Last offset[26]

 

반응형