Standard C

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

레퍼러 2025. 2. 22. 13:39

fopen 함수는 C 언어에서 파일을 열거나 생성할 때 사용됩니다. 파일 입출력 작업의 시작점으로, 파일을 읽기, 쓰기, 추가 등의 다양한 모드로 열 수 있습니다.


1. fopen 함수 기본 문법

#include <stdio.h>

FILE *fopen(const char *filename, const char *mode);

매개변수 설명:

  • filename: 열거나 생성할 파일의 이름(경로 포함).
  • mode: 파일을 열 때 사용할 모드 문자열.

반환 값:

  • 성공 시 FILE 포인터 반환.
  • 실패 시 NULL 반환.

2. 파일 열기 모드 설명

모드 설명

"r" 읽기 전용, 파일이 존재해야 함
"w" 쓰기 전용, 파일이 없으면 생성, 있으면 덮어쓰기
"a" 추가 전용, 파일이 없으면 생성
"r+" 읽기/쓰기, 파일이 존재해야 함
"w+" 읽기/쓰기, 파일이 없으면 생성, 있으면 덮어쓰기
"a+" 읽기/추가, 파일이 없으면 생성
"b" 바이너리 파일 모드(플랫폼 의존)

3. 기본 사용 예제

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (!file) {
        perror("파일 열기 실패");
        return 1;
    }
    printf("파일이 성공적으로 열렸습니다.\\n");
    fclose(file);
    return 0;
}

출력 결과:

파일이 성공적으로 열렸습니다.

4. 실전 활용 예제

4.1. 파일 작성

#include <stdio.h>

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

    fprintf(file, "fopen 함수 사용 예제입니다.\\n");
    fclose(file);
    printf("파일 작성이 완료되었습니다.\\n");
    return 0;
}

출력 결과:

파일 작성이 완료되었습니다.

4.2. 파일 추가 쓰기

#include <stdio.h>

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

    fprintf(file, "새로운 줄 추가 중...\\n");
    fclose(file);
    printf("파일에 데이터가 추가되었습니다.\\n");
    return 0;
}

출력 결과:

파일에 데이터가 추가되었습니다.

5. fopen 사용 시 주의할 점

  1. 반환 값 확인: fopen이 NULL을 반환하는 경우, perror 또는 strerror를 사용하여 오류를 확인하세요.
  2. 파일 경로 유효성: 경로가 잘못되었거나 권한이 없으면 파일 열기에 실패할 수 있습니다.
  3. 적절한 모드 선택: 작업에 맞는 파일 모드를 사용하여 데이터 손실을 방지하세요.
  4. 파일 닫기: 파일 사용 후 fclose를 호출하여 리소스를 해제하세요.

6. 오류 처리 예제

#include <stdio.h>

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

    fclose(file);
    return 0;
}

출력 결과:

파일 열기 실패: No such file or directory

7. 결론

fopen 함수는 C 언어 파일 입출력 작업의 핵심적인 함수입니다. 적절한 파일 모드를 선택하고 반환 값을 확인하는 것이 중요합니다. 오류 처리와 리소스 해제를 통해 안정적인 파일 입출력 프로그램을 작성할 수 있습니다.