C 언어 fclose 사용법 완벽 가이드

fclose 함수는 C 언어에서 파일 스트림을 닫을 때 사용됩니다. 파일 작업이 끝난 후 fclose를 호출하여 파일 리소스를 해제하고 데이터 손실을 방지하는 것은 매우 중요합니다.


1. fclose 함수 기본 문법

#include <stdio.h>

int fclose(FILE *stream);

매개변수 설명:

  • stream: 닫을 파일의 파일 포인터입니다.

반환 값:

  • 0: 파일이 정상적으로 닫힌 경우
  • EOF: 파일 닫기 중 오류가 발생한 경우

2. fclose 사용 목적

  • 파일 스트림을 닫아 시스템 리소스를 해제합니다.
  • 버퍼에 남아 있는 데이터를 디스크에 기록합니다.
  • 데이터 손실 및 메모리 누수를 방지합니다.

3. 기본 사용 예제

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (!file) {
        perror("파일 열기 실패");
        return 1;
    }

    fprintf(file, "fclose 사용법 예제입니다.\\n");

    if (fclose(file) == 0) {
        printf("파일이 성공적으로 닫혔습니다.\\n");
    } else {
        perror("파일 닫기 실패");
    }

    return 0;
}

출력 결과:

파일이 성공적으로 닫혔습니다.

4. 실전 활용 예제

4.1. 파일 읽기 및 닫기

#include <stdio.h>

int main() {
    FILE *file = fopen("sample.txt", "r");
    if (!file) {
        perror("파일 열기 실패");
        return 1;
    }

    char ch;
    while ((ch = fgetc(file)) != EOF) {
        putchar(ch);
    }

    if (fclose(file) != 0) {
        perror("파일 닫기 실패");
    }

    return 0;
}

출력 결과:

(파일의 내용)

4.2. 다중 파일 처리

#include <stdio.h>

int main() {
    FILE *file1 = fopen("file1.txt", "w");
    FILE *file2 = fopen("file2.txt", "w");

    if (!file1 || !file2) {
        perror("파일 열기 실패");
        return 1;
    }

    fprintf(file1, "첫 번째 파일입니다.\\n");
    fprintf(file2, "두 번째 파일입니다.\\n");

    fclose(file1);
    fclose(file2);

    printf("모든 파일이 성공적으로 닫혔습니다.\\n");
    return 0;
}

출력 결과:

모든 파일이 성공적으로 닫혔습니다.

5. fclose 사용 시 주의할 점

  1. 파일 포인터 유효성 확인: fclose 호출 전에 파일 포인터가 NULL인지 확인해야 합니다.
  2. 반환 값 확인: fclose가 EOF를 반환하면 파일 닫기 중 오류가 발생했음을 의미하므로 적절한 오류 처리가 필요합니다.
  3. 중복 닫기 금지: 이미 닫힌 파일을 다시 닫으면 정의되지 않은 동작이 발생할 수 있습니다.

6. 오류 처리 예제

#include <stdio.h>

int main() {
    FILE *file = fopen("output.txt", "w");
    if (!file) {
        perror("파일 열기 실패");
        return 1;
    }

    fprintf(file, "오류 처리 테스트입니다.\\n");

    if (fclose(file) != 0) {
        perror("파일 닫기 실패");
        return 1;
    }

    printf("파일이 정상적으로 닫혔습니다.\\n");
    return 0;
}

출력 결과:

파일이 정상적으로 닫혔습니다.

7. 결론

fclose 함수는 파일 작업 후 시스템 리소스를 해제하고 데이터 무결성을 보장하는 데 필수적인 역할을 합니다. 모든 파일 작업이 끝난 후 반드시 fclose를 호출하여 파일 스트림을 닫는 습관을 들이세요. 반환 값을 통해 오류 여부를 확인하고 적절한 처리를 통해 안정적인 파일 입출력 프로그램을 작성할 수 있습니다.