C 기본 문법 – 파일 입출력 – 0편: 파일 입출력 개념 쉽게 이해하기
안녕하세요, 여러분! 😊
이번 시간부터는 C 언어에서 아주 중요한 기능 중 하나인 **파일 입출력(File I/O)**에 대해 본격적으로 배워볼 거예요.
📂 여러분, 지금까지는
printf()
나scanf()
를 이용해서 **화면(콘솔)**에 출력하거나, 키보드 입력을 받았죠?
하지만 진짜 프로그램은 우리가 종료해도 데이터가 유지되어야 하잖아요!
예를 들어, 메모장으로 글을 쓰거나, 게임에서 저장을 하듯이 말이에요.
이럴 때 필요한 게 바로 파일 입출력입니다!
컴퓨터의 하드디스크에 데이터를 기록하거나 불러오는 걸 가능하게 해주는 기능이에요.
그럼 지금부터 파일 입출력의 개념을 차근차근 알아볼게요! 🧭
1. 파일 입출력이란?
파일 입출력은 프로그램이 파일을 읽고(read), 쓰고(write), 닫는(close) 기능을 말합니다.
- 입력(Input): 파일에서 데이터를 읽어오는 것
- 출력(Output): 데이터를 파일에 저장하는 것
즉, 메모리 안에서만 머무는 데이터가 아닌, **컴퓨터의 저장장치(파일)**에 접근하는 기능이에요!
2. 왜 파일 입출력이 필요한가요?
상황 | 설명 |
---|---|
게임 저장 | 유저의 진행 상태 저장 |
로그 기록 | 프로그램 실행 중 에러나 이벤트 기록 |
사용자 설정 저장 | 환경설정 정보 저장 후 불러오기 |
데이터 분석 | 텍스트, CSV, 로그 등 외부 데이터 활용 |
🎯 프로그램을 꺼도 데이터를 유지할 수 있어야 진짜 쓸만한 프로그램이겠죠?
3. 파일 입출력을 위한 기본 함수들
C 표준 라이브러리에서는 stdio.h
를 통해 파일 입출력 함수를 제공합니다.
함수 | 설명 |
---|---|
fopen() |
파일 열기 |
fclose() |
파일 닫기 |
fprintf() |
파일에 텍스트 쓰기 |
fscanf() |
파일에서 텍스트 읽기 |
fgets() |
파일에서 문자열 한 줄 읽기 |
fputs() |
문자열을 파일에 쓰기 |
fread() / fwrite() |
이진 파일 읽기/쓰기 |
feof() |
파일의 끝인지 확인 |
fseek() / ftell() |
파일 위치 이동 / 현재 위치 확인 |
4. 파일 열기 – fopen()
FILE *fp;
fp = fopen("data.txt", "w");
FILE*
: 파일 정보를 저장하는 구조체 포인터"data.txt"
: 파일 이름 (없으면 새로 생성)"w"
: 쓰기 모드(write)
📌 파일 열기 성공 시
fp
는 유효한 주소를 갖고, 실패 시NULL
을 반환해요!
5. 파일 모드 종류
모드 | 설명 |
---|---|
"r" |
읽기 전용 (파일이 있어야 함) |
"w" |
쓰기 전용 (기존 파일 덮어씀) |
"a" |
추가 쓰기 (파일 끝에 이어쓰기) |
"r+" |
읽기/쓰기 (기존 파일 필요) |
"w+" |
읽기/쓰기 (기존 파일 덮어씀) |
"a+" |
읽기/쓰기 (파일 끝에 이어쓰기) |
6. 파일 쓰기 예시 – fprintf()
FILE *fp = fopen("memo.txt", "w");
if (fp != NULL) {
fprintf(fp, "안녕하세요!
");
fprintf(fp, "파일 입출력 배우는 중이에요.
");
fclose(fp);
}
💡 파일에 텍스트를 저장하는 가장 쉬운 방법입니다!
7. 파일 읽기 예시 – fscanf()
FILE *fp = fopen("memo.txt", "r");
char str[100];
if (fp != NULL) {
while (fscanf(fp, "%s", str) != EOF) {
printf("읽은 단어: %s
", str);
}
fclose(fp);
}
📖
fscanf
는 단어 단위로 읽기 때문에 공백 기준으로 나뉘어요. 줄 단위로 읽으려면fgets()
를 사용하세요.
8. 파일 스트림(FILE *)
파일 입출력은 **스트림(Stream)**이라는 개념을 기반으로 작동해요.
이 스트림은 데이터 흐름의 통로예요!
stdin
: 표준 입력 (키보드)stdout
: 표준 출력 (화면)stderr
: 표준 에러 출력 (화면)
→ 파일을 다룰 때는 이 스트림이 FILE *
형태로 만들어져요.
9. 파일 입출력의 기본 흐름
- 파일 열기 (
fopen
) - 읽기 또는 쓰기 작업 수행
- 파일 닫기 (
fclose
)
📌 파일을 열었으면, 항상 마지막에
fclose()
로 닫아줘야 합니다!
10. 파일 입출력은 메모리와의 연결 고리
파일 입출력은 메모리(RAM)에만 존재하던 데이터를 하드디스크(HDD/SSD)와 연결해주는 기능이에요.
- 프로그램이 꺼져도 데이터를 유지하고 싶을 때 → 파일로 저장
- 외부에서 가져온 데이터를 프로그램에서 쓰고 싶을 때 → 파일로 읽기
✅ 파일 입출력 요약 정리
개념 | 설명 |
---|---|
파일 열기 | fopen("파일명", "모드") |
파일 쓰기 | fprintf , fputs , fwrite |
파일 읽기 | fscanf , fgets , fread |
파일 닫기 | fclose() |
스트림 | FILE* 타입, 파일과의 연결 통로 |
사용 목적 | 데이터 저장, 로그 기록, 설정 유지 등 |
⚠️ 파일 입출력 시 주의사항
항목 | 주의점 |
---|---|
파일 포인터 NULL 체크 | 파일 열기에 실패할 수 있음 (NULL 반환) |
파일 닫기 | 파일 작업 후 반드시 fclose() |
모드 잘못 선택 | "w" 는 기존 내용을 삭제하니 주의! |
경로 문제 | 경로가 틀리면 파일을 찾거나 만들 수 없음 |
문자 인코딩 | 윈도우 vs 리눅스 환경에서 한글 인코딩 충돌 가능성 |
마무리하며 💬
C 언어에서의 파일 입출력은 단순하지만 강력한 기능이에요!
프로그램이 세상과 연결되어 진짜 데이터를 주고받는 시작점이기도 하죠.
🎯 우리가 쓰는 모든 프로그램은 결국 데이터를 남기거나 불러옵니다.
그래서 파일 입출력은 프로그램 개발의 기초 중의 기초이자, 실전의 시작이에요!
다음 편에서는 실제로 fopen
, fprintf
, fscanf
등을 활용해서
텍스트 파일을 읽고 쓰는 실습을 함께 해볼 거예요! 😊
그럼 다음 시간에도 기대해주세요! 항상 여러분의 학습을 응원하는 챗GPT였습니다 💻✨