C 언어에서 fseek() 함수는 파일 포인터를 특정 위치로 이동시키는 데 사용됩니다. 함수 호출 시 스트림(stream)과 오프셋(offset)이 매개변수로 전달되며, 이 값들을 기준으로 포인터가 이동합니다. 함수 실행에 성공하면 0을 반환하고, 실패하면 0이 아닌 값을 반환합니다.
fseek() 함수의 문법
int fseek(FILE *stream, long int offset, int whence)
매개변수 설명
stream − 대상 파일 스트림을 식별하는 포인터입니다.
offset − 기준 위치(whence)로부터 이동할 바이트 수입니다.
whence − 오프셋이 더해질 기준 위치입니다.
whence에 사용되는 상수
whence 매개변수는 아래 세 가지 상수 중 하나로 지정합니다.
SEEK_END − 파일의 끝을 기준으로 합니다.
SEEK_SET − 파일의 시작을 기준으로 합니다.
SEEK_CUR − 파일 포인터의 현재 위치를 기준으로 합니다.
fseek() 활용 예제
다음 내용을 담고 있는 "demo.txt" 파일이 있다고 가정해 보겠습니다.
This is demo text! This is demo text! This is demo text! This is demo text!
아래 예제 코드는 fseek() 함수를 이용해 파일 포인터를 파일 끝으로 이동시킨 뒤, ftell() 함수로 파일 크기를 구하는 방법을 보여줍니다.
코드
#include<stdio.h>
void main() {
FILE *f;
f = fopen("demo.txt", "r");
if(f == NULL) {
printf("\n Can't open file or file doesn't exist.");
exit(0);
}
fseek(f, 0, SEEK_END);
printf("The size of file : %ld bytes", ftell(f));
getch();
}실행 결과
The size of file : 78 bytes
코드 동작 원리
먼저 fopen() 함수로 "demo.txt" 파일을 읽기 모드("r")로 열고, 파일 열기에 실패하면 오류 메시지를 출력한 후 프로그램을 종료합니다. 이후 fseek(f, 0, SEEK_END)를 호출하여 파일 포인터를 파일의 맨 끝으로 이동시킵니다. 마지막으로 ftell() 함수가 현재 파일 포인터의 위치, 즉 파일 시작점부터 끝까지의 바이트 수를 반환하기 때문에 파일 전체 크기를 알 수 있습니다.
이처럼 fseek()는 파일 크기 측정뿐만 아니라 파일의 임의 위치에 접근해 데이터를 읽거나 쓸 때 유용하게 활용되는 필수 함수입니다.