Standard C

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

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

ferror 함수는 C 언어에서 파일 스트림의 오류 상태를 확인할 때 사용됩니다. 파일 입출력 작업 중 오류가 발생했는지 판단하여 안정적인 프로그램을 구현할 수 있도록 도와줍니다.


1. ferror 함수 기본 문법

#include <stdio.h>

int ferror(FILE *stream);

매개변수 설명:

  • stream: 오류 상태를 확인할 파일 포인터입니다.

반환 값:

  • 0: 오류가 발생하지 않은 경우
  • 0이 아닌 값: 오류가 발생한 경우

2. ferror 사용 목적

  • 파일 읽기/쓰기 중 발생한 오류 확인
  • 오류 발생 시 적절한 오류 처리 수행
  • clearerr 함수와 함께 사용하여 오류 상태 초기화

3. 기본 사용 예제

#include <stdio.h>

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

    char buffer[100];
    fread(buffer, sizeof(char), 200, file); // 존재하지 않는 데이터 읽기 시도

    if (ferror(file)) {
        printf("파일 읽기 중 오류가 발생했습니다.\\n");
    } else {
        printf("파일을 정상적으로 읽었습니다.\\n");
    }

    fclose(file);
    return 0;
}

출력 결과:

파일 읽기 중 오류가 발생했습니다.

4. 실전 활용 예제

4.1. 파일 쓰기 중 오류 확인

#include <stdio.h>

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

    if (fprintf(file, "쓰기 테스트입니다.\\n") < 0) {
        if (ferror(file)) {
            printf("파일 쓰기 중 오류가 발생했습니다.\\n");
        }
    }

    fclose(file);
    return 0;
}

출력 결과:

파일 쓰기 중 오류가 발생했습니다.

4.2. clearerr와 함께 사용

#include <stdio.h>

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

    fgetc(file);
    fgetc(file);
    
    if (ferror(file)) {
        printf("파일 읽기 중 오류 발생. 상태 초기화 중...\\n");
        clearerr(file);
    }

    if (!ferror(file)) {
        printf("오류 상태가 초기화되었습니다.\\n");
    }

    fclose(file);
    return 0;
}

출력 결과:

오류 상태가 초기화되었습니다.

5. ferror 사용 시 주의할 점

  1. 읽기/쓰기 함수 호출 후 사용: ferror는 파일 입출력 함수 호출 후 오류 발생 여부를 확인하는 용도로 사용해야 합니다.
  2. clearerr로 오류 초기화: 오류 발생 후 clearerr를 사용하여 상태를 초기화하지 않으면 이후 작업에 영향을 줄 수 있습니다.
  3. perror와 함께 상세 오류 출력: perror를 사용하여 시스템에서 발생한 구체적인 오류 메시지를 출력할 수 있습니다.

6. 오류 처리 예제

#include <stdio.h>

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

    if (ferror(file)) {
        printf("파일 열기 후 오류가 발생했습니다.\\n");
    }

    fclose(file);
    return 0;
}

출력 결과:

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

7. 결론

ferror 함수는 파일 입출력 작업 중 발생할 수 있는 오류를 감지하고 처리하는 데 매우 중요한 함수입니다. 안정적이고 견고한 파일 입출력 프로그램을 구현하려면 ferror를 적절히 활용하고, 필요할 경우 clearerr로 상태를 초기화하여 다음 작업에 지장이 없도록 하세요.