프로그램이 종료되어도 데이터를 영구히 저장하려면 보조기억장치의 **파일(File)**에 기록해야 합니다. C 언어는 **스트림(Stream)**이라는 데이터 통로를 통해 파일 입출력을 처리합니다.
1. 파일 입출력 3단계 필수 순서
- 파일 열기 (
fopen): 파일과 프로그램 사이에 통로(스트림) 연결 및FILE*포인터 반환. - 읽기/쓰기 작업:
fprintf,fscanf,fputs,fgets등 수행. - 파일 닫기 (
fclose): 사용이 끝난 스트림 자원을 해제.
2. 파일 텍스트 쓰기 / 읽기 예시
#include <stdio.h>
int main(void) {
// 1. 파일 열기 (쓰기 모드 'w')
FILE *fp = fopen("data.txt", "w");
if (fp == NULL) {
printf("파일 열기 실패!\n");
return 1;
}
// 2. 파일에 기록
fprintf(fp, "이름: %s, 점수: %d\n", "이인상", 100);
// 3. 파일 닫기
fclose(fp);
printf("data.txt에 데이터가 저장되었습니다.\n");
return 0;
}
3. 대표적인 파일 오픈 모드 (Mode)
| 모드 | 의미 | 파일이 없을 때 | 파일이 이미 있을 때 |
|---|---|---|---|
"r" |
읽기 전용 (Read) | 에러 (NULL 반환) |
정상 열림 |
"w" |
쓰기 전용 (Write) | 새 파일 생성 | 기존 내용을 싹 덮어씀(삭제) |
"a" |
추가 쓰기 (Append) | 새 파일 생성 | 기존 내용 뒤에 덧붙임 |
"rb" / "wb" |
바이너리 입출력 모드 | 이진 파일 전용 | 이진 파일 전용 |
4. 자주 묻는 질문 (Q&A)
Q. 파일 작업이 끝나고 fclose()를 안 부르면 어떻게 되나요?
A. 버퍼에 남아있는 데이터가 파일에 완전히 반영되지 못해 짤리거나, 시스템 자원(파일 핸들)이 낭비되는 메모리/스트림 누수가 발생할 수 있습니다.