Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 파일 오류 처리 함수 완벽 정리: ferror, perror, feof

파일(File)은 레코드들의 집합이자, 데이터를 영구적으로 저장하는 하드 디스크상의 공간을 의미합니다.

C 언어에서의 파일 연산

C 프로그래밍 언어에서 파일에 대해 수행할 수 있는 주요 연산은 다음과 같습니다.

  • 파일 이름 지정하기
  • 파일 열기
  • 파일 읽기
  • 파일 쓰기
  • 파일 닫기

파일 열기 문법

파일 포인터 선언 문법은 다음과 같습니다.

FILE *File pointer;

예시: FILE *fptr;

파일을 여는 fopen 함수의 문법은 다음과 같습니다.

File pointer = fopen("파일 이름", "모드");

예시:

fptr = fopen("sample.txt", "r");
FILE *fp;
fp = fopen("sample.txt", "w");

파일 오류 처리란?

파일 작업 중 발생할 수 있는 대표적인 오류는 다음과 같습니다.

  • 파일의 끝(EOF)을 넘어서까지 읽으려고 시도하는 경우
  • 장치 오버플로우(Device overflow)
  • 유효하지 않은 파일을 열려고 시도하는 경우
  • 다른 모드로 열린 파일에 대해 잘못된 연산을 수행하는 경우

이러한 오류를 감지하고 처리하기 위해 C 언어는 ferror(), perror(), feof() 세 가지 표준 라이브러리 함수를 제공합니다.

1. ferror() 함수

ferror() 함수는 파일 입출력(read/write) 작업 중 오류가 발생했는지 감지하는 데 사용됩니다.

문법

int ferror(file pointer);

예시

FILE *fp;
if (ferror(fp))
    printf("오류가 발생했습니다");

이 함수는 성공 시 0을 반환하고, 오류가 발생하면 0이 아닌 값을 반환합니다.

예제 프로그램

다음은 ferror() 함수를 사용한 C 프로그램입니다.

#include<stdio.h>
int main(){
    FILE *fptr;
    fptr = fopen("sample.txt","r");
    if(ferror(fptr)!=0)
        printf("오류 발생");
    putc('T',fptr);
    if(ferror(fptr)!=0)
        printf("오류 발생");
    fclose(fptr);
    return 0;
}

실행 결과

오류 발생
참고: 읽기 전용 모드로 열린 파일에 쓰기를 시도하면 오류가 발생합니다.

2. perror() 함수

perror() 함수는 발생한 오류 메시지를 화면에 출력하는 데 사용됩니다.

문법

perror(string variable);

예시

FILE *fp;
char str[30] = "Error is";
perror(str);

출력 결과

Error is: error 0

예제 프로그램

다음은 perror() 함수를 사용한 C 프로그램입니다.

#include<stdio.h>
int main(){
    FILE *fp;
    char str[30] = "error is";
    int i = 20;
    fp = fopen("sample.txt", "r");
    if (fp == NULL){
        printf("파일이 존재하지 않습니다");
    }
    else{
        fprintf(fp, "%d", i);
        if (ferror(fp)){
            perror(str);
            printf("읽기 전용으로 열린 파일 때문에 오류가 발생했습니다");
        }
    }
    fclose(fp);
    return 0;
}

실행 결과

error is: Bad file descriptor
읽기 전용으로 열린 파일 때문에 오류가 발생했습니다

3. feof() 함수

feof() 함수는 파일의 끝(End Of File)에 도달했는지 여부를 확인하는 데 사용됩니다.

문법

int feof(file pointer);

예시

FILE *fp;
if (feof(fp))
    printf("파일의 끝에 도달했습니다");

이 함수는 파일의 끝에 도달하면 0이 아닌 값을 반환하고, 그렇지 않으면 0을 반환합니다.

예제 프로그램

다음은 feof() 함수를 사용한 C 프로그램입니다.

#include<stdio.h>
main(){
    FILE *fp;
    int i,n;
    fp = fopen("number.txt", "w");
    for (i=0; i<=100; i=i+10){
        putw(i, fp);
    }
    fclose(fp);
    fp = fopen("number.txt", "r");
    printf("파일 내용: ");
    for (i=0; i<=100; i++){
        n = getw(fp);
        if (feof(fp)){
            printf("파일의 끝에 도달했습니다");
            break;
        }else{
            printf("%d ", n);
        }
    }
    fclose(fp);
    getch();
}

실행 결과

파일 내용:
10 20 30 40 50
60 70 80 90 100
파일의 끝에 도달했습니다.

정리

C 언어의 파일 오류 처리 함수를 요약하면 다음과 같습니다.

  • ferror(): 파일 입출력 중 오류 발생 여부를 확인 (오류 시 0이 아닌 값 반환)
  • perror(): 마지막으로 발생한 오류 메시지를 출력
  • feof(): 파일 끝(EOF) 도달 여부를 확인 (도달 시 0이 아닌 값 반환)

이 세 가지 함수를 적절히 활용하면 파일 입출력 과정에서 발생할 수 있는 다양한 예외 상황을 안정적으로 처리할 수 있습니다.