C 기본 문법 – 파일 입출력 – 1 – 파일 열기와 닫기

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+" 사용
파일 열고 닫기 깜빡 메모리 누수 및 파일 손상 위험
경로 확인 잘못된 경로 입력 시 파일 열기 실패

마무리하며 💬

파일 입출력의 첫 걸음은 바로 파일을 여는 것과 닫는 것이에요.
이 두 가지는 너무 기본이지만, 놓치면 치명적인 버그가 생길 수 있답니다!

🎯 프로그램이 파일을 다룬다는 건,
컴퓨터의 실제 저장소와 대화를 나누는 것이에요.
그러니 그 대화의 문을 열고, 대화가 끝나면 예의 바르게 문을 닫는 것, 잊지 마세요!

다음 시간에는 실제로 파일에 내용을 쓰고, 읽는 방법을 배워볼게요!
그럼 다음 편에서 또 만나요~ 😄✍️

답글 남기기