728x90
반응형
C 언어에서 파일을 다룰 때 파일 포인터를 사용하여 원하는 위치로 이동하고, 현재 위치를 확인하는 기능이 필요합니다. 이를 위해 stdio.h
에서 제공하는 fseek
, ftell
, rewind
함수를 사용할 수 있습니다.
이번 글에서는 파일 포인터의 개념과 함께 fseek
, ftell
, rewind
함수의 사용법을 예제 코드와 함께 설명하겠습니다.
1. 파일 포인터란?
C 언어에서 파일은 스트림(stream)으로 관리되며, FILE *
타입의 파일 포인터를 통해 조작됩니다. 파일 포인터는 현재 파일에서 읽기/쓰기 작업을 수행할 위치를 가리킵니다.
파일의 특정 위치로 이동하거나 현재 위치를 확인하려면 fseek
, ftell
, rewind
함수를 활용할 수 있습니다.
2. fseek 함수
fseek
함수는 파일 포인터를 원하는 위치로 이동시키는 함수입니다.
사용법
int fseek(FILE *stream, long offset, int whence);
stream
: 파일 포인터offset
: 이동할 바이트 수whence
: 기준 위치 (SEEK_SET
,SEEK_CUR
,SEEK_END
)- 반환값: 성공하면 0, 실패하면 -1
whence 값의 의미
SEEK_SET
: 파일의 시작점을 기준으로 이동SEEK_CUR
: 현재 위치를 기준으로 이동SEEK_END
: 파일의 끝을 기준으로 이동
예제: fseek 사용하기
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "r");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
// 파일의 처음에서 10바이트 이동
fseek(fp, 10, SEEK_SET);
// 현재 파일 포인터 위치 출력
long pos = ftell(fp);
printf("현재 파일 위치: %ld\n", pos);
fclose(fp);
return 0;
}
3. ftell 함수
ftell
함수는 현재 파일 포인터의 위치를 반환합니다.
사용법
long ftell(FILE *stream);
stream
: 파일 포인터- 반환값: 현재 위치(바이트 단위), 실패 시 -1
예제: 파일의 현재 위치 확인
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "r");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
printf("초기 위치: %ld\n", ftell(fp));
fseek(fp, 20, SEEK_SET);
printf("20바이트 이동 후 위치: %ld\n", ftell(fp));
fclose(fp);
return 0;
}
4. rewind 함수
rewind
함수는 파일 포인터를 파일의 처음으로 되돌립니다.
사용법
void rewind(FILE *stream);
stream
: 파일 포인터- 반환값 없음
예제: 파일 처음으로 이동하기
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "r");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
fseek(fp, 50, SEEK_SET);
printf("50바이트 이동 후 위치: %ld\n", ftell(fp));
rewind(fp);
printf("rewind 후 위치: %ld\n", ftell(fp));
fclose(fp);
return 0;
}
5. 실전 예제: 특정 위치에서 데이터 읽기
아래 예제는 fseek
과 ftell
을 이용하여 파일의 특정 위치에서 데이터를 읽는 방법을 보여줍니다.
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "r");
if (fp == NULL) {
perror("파일 열기 실패");
return 1;
}
// 파일 크기 확인
fseek(fp, 0, SEEK_END);
long file_size = ftell(fp);
printf("파일 크기: %ld 바이트\n", file_size);
// 파일의 중간 위치로 이동하여 데이터 읽기
fseek(fp, file_size / 2, SEEK_SET);
char buffer[20];
fread(buffer, sizeof(char), 19, fp);
buffer[19] = '\0';
printf("중간에서 읽은 데이터: %s\n", buffer);
fclose(fp);
return 0;
}
6. 마무리
fseek
, ftell
, rewind
함수는 파일 내에서 원하는 위치로 이동하고 데이터를 읽거나 쓸 때 필수적인 함수입니다. 파일을 다룰 때 파일 포인터를 적절히 조작하면 효율적인 파일 입출력을 구현할 수 있습니다.
이번 글에서는 기본적인 개념과 예제를 살펴보았으며, 이를 바탕으로 다양한 파일 조작을 시도해보길 바랍니다!
반응형
'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
C 표준 라이브러리 string.h 개요 및 문자열 관련 함수 (strlen, strcpy, strncpy) (0) | 2025.02.09 |
---|---|
파일 에러 처리 함수(perror, clearerr, feof, ferror) - C 언어 (0) | 2025.02.08 |
C언어 표준 입출력 (stdio.h) - fprintf와 fscanf 사용법 (0) | 2025.02.06 |
C 언어 표준 API - stdio.h의 파일 입출력 (fopen, fclose, fread, fwrite) (0) | 2025.02.05 |
C 언어 표준 입출력 - `fputs`와 `fgets` 사용법 (0) | 2025.02.04 |