fseek() 함수란?
C 언어에서 fseek() 함수는 파일 포인터를 특정 위치로 이동시키는 데 사용됩니다. 이동할 대상 스트림과 오프셋(거리)은 함수의 매개변수로 전달됩니다. 함수가 성공적으로 실행되면 0을 반환하고, 실패하면 0이 아닌 값을 반환합니다.
C 언어에서 fseek() 함수의 문법은 다음과 같습니다.
int fseek(FILE *stream, long int offset, int whence)
fseek() 함수에서 사용되는 매개변수는 다음과 같습니다.
stream − 대상 스트림을 식별하는 파일 포인터입니다.
offset − 기준 위치로부터 이동할 바이트 수입니다.
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!
이제 코드를 살펴보겠습니다.
예제 코드
#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" 파일을 연 후, fseek() 함수를 사용하여 파일 포인터를 파일의 끝으로 이동시킵니다. 이후 ftell() 함수가 현재 포인터 위치, 즉 파일 크기를 바이트 단위로 반환합니다.
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);
rewind() 함수란?
rewind() 함수는 파일 포인터의 위치를 주어진 스트림의 시작 부분으로 되돌리는 데 사용됩니다. 이 함수는 별도의 반환값이 없으며, 내부적으로 오류 표시자(error indicator)와 파일 끝 표시자(eof indicator)도 함께 초기화한다는 특징이 있습니다.
C 언어에서 rewind() 함수의 문법은 다음과 같습니다.
void rewind(FILE *stream);
rewind() 예제
다음과 같은 내용을 담고 있는 "new.txt" 파일이 있다고 가정해 보겠습니다.
This is demo! This is demo!
이제 예제를 살펴보겠습니다.
예제 코드
#include<stdio.h>
void main() {
FILE *f;
f = fopen("new.txt", "r");
if(f == NULL) {
printf("\n Can't open file or file doesn't exist.");
exit(0);
}
rewind(f);
fseek(f, 0, SEEK_END);
printf("The size of file : %ld bytes", ftell(f));
getch();
}
실행 결과
The size of file : 28 bytes
위 프로그램에서는 fopen() 함수로 파일을 열고, 포인터 변수가 NULL이면 파일을 열 수 없거나 파일이 존재하지 않는다는 메시지를 출력합니다. rewind() 함수는 파일 포인터를 파일의 시작 위치로 되돌린 후, fseek()와 ftell()을 조합해 파일 크기를 계산합니다.
f = fopen("new.txt", "r");
if(f == NULL) {
printf("\n Can't open file or file doesn't exist.");
exit(0);
}
rewind(f);
fseek()와 rewind()의 핵심 차이점
fseek()는 원하는 임의의 위치로 파일 포인터를 자유롭게 이동할 수 있으며, 성공 여부를 나타내는 반환값이 있습니다.
rewind()는 오직 파일의 시작 위치로만 포인터를 이동하며, 반환값이 없습니다.
rewind()는 호출 시 오류 표시자와 EOF 표시자를 초기화하지만, fseek()는 그렇지 않습니다.