C 파일 입출력(File I/O) — 파일 생성, 열기, 읽기, 쓰기, 닫기
C 파일 관리 개요
파일은 대량의 영구 데이터를 저장하는 데 사용됩니다. 다른 많은 프로그래밍 언어와 마찬가지로 C 언어도 다음과 같은 파일 관리 기능을 제공합니다.
- 파일 생성
- 파일 열기
- 파일 읽기
- 파일 쓰기
- 파일 닫기
C의 주요 파일 관리 함수
C에서 가장 중요하게 사용되는 파일 관리 함수는 다음과 같습니다.
| 함수 | 용도 |
|---|---|
| fopen() | 새 파일을 만들거나 기존 파일 열기 |
| fclose() | 파일 닫기 |
| fprintf() | 파일에 데이터 블록 쓰기 |
| fscanf() | 파일에서 데이터 블록 읽기 |
| getc() | 파일에서 한 문자 읽기 |
| putc() | 파일에 한 문자 쓰기 |
| getw() | 파일에서 정수 하나 읽기 |
| putw() | 파일에 정수 하나 쓰기 |
| fseek() | 파일 포인터를 지정한 위치로 이동 |
| ftell() | 파일 포인터의 현재 위치 반환 |
| rewind() | 파일 포인터를 파일의 처음으로 이동 |
입력:
sourcefile = x1.txt
targefile = x2.txt
출력: File copied successfully.
프로그램 설명
이 프로그램은 한 파일의 내용을 다른 파일로 복사합니다. 먼저 복사할 원본 파일을 지정한 뒤, 원본 파일은 "읽기(r)" 모드로 열고 대상 파일은 "쓰기(w)" 모드로 엽니다. 그다음 fgetc()로 원본 파일을 한 문자씩 읽어 fputc()로 대상 파일에 차례대로 기록하면 복사가 완료됩니다. 파일 끝(EOF)에 도달하면 반복문이 종료되고, 두 파일을 모두 닫으면서 작업을 마무리합니다.
주요 처리 흐름
- 원본 파일을 읽기 모드로 열고, 실패 시 오류 메시지와 함께 종료합니다.
- 대상 파일을 쓰기 모드로 열고, 실패 시 이미 연 원본 파일을 닫은 후 종료합니다.
- 원본 파일의 내용을 문자 단위로 읽어 대상 파일에 기록합니다.
- 복사가 끝나면 성공 메시지를 출력하고 두 파일을 모두 닫습니다.
예제 코드
#include <stdio.h>
#include <stdlib.h>
int main() {
int ch;
FILE *source, *target;
char source_file[] = "x1.txt";
char target_file[] = "x2.txt";
source = fopen(source_file, "r");
if (source == NULL) {
printf("Press any key to exit...\n");
exit(EXIT_FAILURE);
}
target = fopen(target_file, "w");
if (target == NULL) {
fclose(source);
printf("Press any key to exit...\n");
exit(EXIT_FAILURE);
}
while ((ch = fgetc(source)) != EOF)
fputc(ch, target);
printf("File copied successfully.\n");
fclose(source);
fclose(target);
return 0;
}
실행 결과
File copied successfully.
참고 사항
fgetc()는int형 값을 반환하므로, EOF와 비교할 변수는 반드시int형으로 선언해야 합니다.char형으로 선언하면 EOF 판별이 잘못될 수 있습니다.- 대상 파일이 이미 존재하는 경우 "쓰기(w)" 모드는 기존 내용을 모두 지우고 새로 작성하므로 주의해야 합니다.
- 파일을 열었다면 성공 여부와 관계없이 반드시
fclose()로 닫아 리소스 누수를 방지하는 것이 좋습니다.