C 기본 문법 – 파일 입출력 – 1편: 파일 열기와 닫기 완전 정복
안녕하세요, 여러분! 😊
이번 시간에는 C 언어의 파일 입출력 중에서도 **가장 기본적인 단계인 ‘파일 열기와 닫기’**에 대해 알아볼게요!
📂 마치 책을 읽기 위해서는 먼저 책을 펴야 하고,
다 읽고 나면 책을 덮는 것처럼,
파일도 열고 닫는 절차가 꼭 필요하답니다!
그럼 지금부터 파일을 어떻게 여는지, 어떤 모드로 여는지, 언제 어떻게 닫아야 하는지를 쉽고 자세하게 설명드릴게요 😊
1. 파일 열기 함수: fopen()
파일을 열 때 가장 먼저 사용하는 함수가 바로 fopen()
이에요.
FILE *fopen(const char *filename, const char *mode);
filename
: 열고자 하는 파일 이름 (또는 경로)mode
: 파일을 여는 방식 (쓰기/읽기/추가 등)
예시
FILE *fp = fopen("data.txt", "r");
💡 이 코드는 현재 디렉토리에 있는
data.txt
파일을 읽기 전용으로 여는 코드입니다.
2. FILE *
란 무엇인가요?
FILE *
는 C 표준 라이브러리에서 정의한 파일 구조체 포인터입니다.
- 파일과 프로그램을 연결해주는 통로(Stream) 역할
- 모든 파일 작업은 이
FILE *
를 통해 진행됩니다.
🎯 쉽게 말해,
FILE *
는 파일을 조작하는 리모컨이에요!
이 리모컨이 있어야fprintf()
,fscanf()
같은 함수로 조작할 수 있답니다.
3. 파일 열기 모드 종류
모드 | 설명 |
---|---|
"r" |
읽기 전용 (파일 존재해야 함) |
"w" |
쓰기 전용 (기존 내용 삭제, 없으면 새로 생성) |
"a" |
추가 쓰기 (파일 끝에 이어쓰기, 없으면 생성) |
"r+" |
읽기/쓰기 (파일 존재해야 함) |
"w+" |
읽기/쓰기 (기존 내용 삭제) |
"a+" |
읽기/쓰기 (끝에 이어쓰기) |
"rb" , "wb" 등 |
바이너리 파일 작업 시 사용 |
예시
fopen("log.txt", "a"); // 기존 log.txt 끝에 이어쓰기
fopen("config.ini", "r"); // 읽기 전용
⚠️
"w"
또는"w+"
로 열면 기존 내용이 전부 삭제되니 주의하세요!
4. 파일 열기 오류 처리 (꼭 체크해야 해요!)
fopen()
은 실패 시 NULL
을 반환합니다.
FILE *fp = fopen("noexist.txt", "r");
if (fp == NULL) {
printf("파일 열기에 실패했습니다.
");
return 1;
}
💣 존재하지 않는 파일을
"r"
모드로 열면 실패합니다!
항상NULL
체크를 해줘야 안전한 코드가 됩니다.
5. 파일 닫기 함수: fclose()
파일 작업이 끝나면 반드시 fclose()
로 닫아야 합니다.
int fclose(FILE *stream);
- 성공 시
0
, 실패 시EOF
반환
예시
FILE *fp = fopen("sample.txt", "w");
if (fp != NULL) {
fprintf(fp, "파일에 쓰기!
");
fclose(fp); // 파일 닫기
}
📌 파일을 닫지 않으면 데이터가 저장되지 않거나, 메모리 누수가 발생할 수 있어요!
6. 왜 꼭 파일을 닫아야 하나요?
이유 | 설명 |
---|---|
버퍼 비우기 | 파일에 쓰기 작업은 임시로 메모리에 저장되는데, fclose() 시 디스크에 반영됨 |
메모리 누수 방지 | 열려 있는 파일 수에는 한계가 있음 |
데이터 보호 | 파일이 닫히지 않으면 내용이 손상될 수 있음 |
🎯
fclose()
는 단순한 마무리 작업이 아니라, 파일의 생명을 지키는 안전벨트입니다!
7. 실전 예제: 텍스트 파일 열고 쓰기
#include <stdio.h>
int main() {
FILE *fp = fopen("note.txt", "w");
if (fp == NULL) {
printf("파일 열기에 실패했습니다.
");
return 1;
}
fprintf(fp, "안녕하세요!
이건 파일 입출력 예제입니다.
");
fclose(fp);
printf("파일에 성공적으로 저장되었습니다.
");
return 0;
}
실행 결과
📄 note.txt 파일이 생성되고, 내용이 저장됩니다.
✅ 요약 정리
함수 | 설명 |
---|---|
fopen("파일명", "모드") |
파일 열기 |
fclose(fp) |
파일 닫기 |
FILE * |
파일 핸들(포인터), 모든 파일 작업의 기본 |
NULL 체크 |
파일 열기 실패 여부 확인 필수 |
열기 모드 | "r" , "w" , "a" , "r+" , "w+" , "a+" 등 |
⚠️ 파일 열기와 닫기 주의사항
주의점 | 설명 |
---|---|
파일이 없는데 "r" 로 열기 |
실패함 (NULL 반환) |
"w" 는 기존 파일 삭제됨 |
내용 유지 필요 시 "a" 또는 "r+" 사용 |
파일 열고 닫기 깜빡 | 메모리 누수 및 파일 손상 위험 |
경로 확인 | 잘못된 경로 입력 시 파일 열기 실패 |
마무리하며 💬
파일 입출력의 첫 걸음은 바로 파일을 여는 것과 닫는 것이에요.
이 두 가지는 너무 기본이지만, 놓치면 치명적인 버그가 생길 수 있답니다!
🎯 프로그램이 파일을 다룬다는 건,
컴퓨터의 실제 저장소와 대화를 나누는 것이에요.
그러니 그 대화의 문을 열고, 대화가 끝나면 예의 바르게 문을 닫는 것, 잊지 마세요!
다음 시간에는 실제로 파일에 내용을 쓰고, 읽는 방법을 배워볼게요!
그럼 다음 편에서 또 만나요~ 😄✍️