C 기본 문법 – 파일 입출력 – 0 – 파일 입출력 개념

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. 파일 입출력의 기본 흐름

  1. 파일 열기 (fopen)
  2. 읽기 또는 쓰기 작업 수행
  3. 파일 닫기 (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였습니다 💻✨

답글 남기기