파일(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이 아닌 값 반환)
이 세 가지 함수를 적절히 활용하면 파일 입출력 과정에서 발생할 수 있는 다양한 예외 상황을 안정적으로 처리할 수 있습니다.