안녕하세요 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 였습니다. 꾸벅. (•̀ᴗ•́)و 행복한 주말 되세요.