Coding & Programming/C, C++

[C/C++] 파일 포인터를 fseek 함수로 이해하기(fseek function example)

mainCodes 2021. 2. 28. 08:50

안녕하세요 JollyTree(•̀ᴗ•́)و입니다. fseek() 함수는 파일 입출력에서 정말 유용한 함수로 사용됩니다.  인터넷 자료를 찾아보니, "Reposition stream position indicator"라고 되어 있네요. 파일 스트림의 위치를 가리키는 일명 지시자(indicator)를 재배치 할 수 있다 정도로 저는 이해하고 있는데요. 오래 기억하기 위해 예제 코드를 작성해 보았습니다.

 

아래 예제는 fseek()의 3번째 파라미터인 SEEK_SET, SEEK_END, SEEK_CUR의 사용을 for 문을 예시로 보여줍니다. 

 

예제(fseek Example):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define FILE_NAME "maincodes.txt"
 
int main()
{
    FILE* fp = NULL;
    int size = 0;
    char* read_buf = NULL;
 
    fp = fopen(FILE_NAME, "r");
    if (fp == NULL)
    {
        printf("파일 오픈 에러\n");
        return 1;
    }
 
    fseek(fp, 0, SEEK_END);
    size = ftell(fp);
    printf("파일 크기 = %d\n"size);
 
    for (int i = 0; i < size; i++)
    {
        fseek(fp, i, SEEK_SET); //파일포인터를 파일의 맨처음부터 1씩 이동
        char ch = fgetc(fp);    //현재 파일포인터 위치의 한 문자를 가져온다.
        printf("%c", ch);       //문자를 출력
    }
 
    printf("\n");
    for (int i = 2; i < size+2; i++)
    {
        fseek(fp, -i, SEEK_END); //파일포인터를 파일의 맨뒤에서부터 -1씩 이동
        char ch = fgetc(fp);     //현재 파일포인터 위치의 한 문자를 가져온다.
        putchar(ch);             //문자를 출력
    }
 
    printf("\n");
    fseek(fp, 0, SEEK_SET);
    for (int i = 0; i < size; i++)
    {
       fseek(fp, i, SEEK_CUR); //현재 위치에서 파일포인터를 +i만큼 이동
        char ch = fgetc(fp); //파일포인터 +1 이동
        putchar(ch);
    }
    fclose(fp);
 
    return 0;
}
cs

예제에서 사용한 maincodes.txt 파일의 내용입니다.

 

 

 

 

 

 

실행결과(Output):

 

 

 

 

(참고) fgetc()함수가 호출되면 파일포인터가 +1 이동합니다. 그래서 실행결과에서  4번째 줄의 결과와 같이 "0259EKRZ"가 출력되었습니다. 이상,  JollyTree 였습니다. 꾸벅. (•̀ᴗ•́)و  행복한 주말 되세요.