easy software

C언어 파일입출력 feof함수를 알아보자 본문

C언어/FILE IO

C언어 파일입출력 feof함수를 알아보자

JAVA 웹개발자 2015. 2. 12. 18:42

feof 함수란?

 

 

#include <stdio.h>

 

int feof(FILE * stream)

 

으로 정의되어 있습니다.

 

이 함수는 파일의 끝에 도달했는지 여부를 확인할 때 사용하게 됩니다.

 

만약, 파일의 끝에 도달하게 되면 0이 아닌 값을 반환합니다.

 

즉 파일의 끝에 도달하지 못했을 경우에 0을 반환하는 것입니다.

 

 

 

그럼 이 함수를 이용하여 예제를 하나 해보도록 하겠습니다.

 

제 블로그에서 제목이 C언어 fopen fclose fputs을 이용하여 파일입출력을 해보자2

 

에서 사용했던 mystory.txt를 사용하겠습니다.

 

mystroy.txt를 열어서 모든 데이터를 출력해보겠습니다.

 

 

#include <stdio.h>

 

int main(void){
     int state;
     char a;

 

     //데이터를 읽기위한 스트림 생성
     FILE* fp = fopen("D:\\mystory.txt", "rt");
     /* fopen함수는 오류발생시 NULL을 리턴하므로
     파일 개방 중 오류발생시 프로그램을 종료 */
     if (fp == NULL){
          printf("스트림 생성시 오류발생");
          return 1;
     }

 

     /* 파일에 얼마의 데이터가 있는지 모른다고 가정
     무한루프를 돌면서 계속 데이터를 출력
     파일에 끝에 도달하면 feof함수에 의해 반복문 탈출 */
     while (1){
          if (feof(fp) != 0){
               printf("파일의 끝에 도달했습니다.\n");
               break;
          }

 

          //한글자씩 꺼내서 출력
          a = fgetc(fp);
          printf("%c", a);
     }

 

     /* fclose함수는 종료시 오류가 발생하면
     0이 아닌 다른값을 리턴하므로 비정상 종료로 판단되면
     안내후 프로그램을 종료 */
     state = fclose(fp);
     if (state != 0){
          printf("스트림 제거시 오류발생");
          return 1;
     }

     return 0;
}

 

 

처음에 D드라이브에 저장된 mystory.txt를 텍스트모드의 읽기전용으로 개방합니다.

 

현재 파일에 데이터가 얼마나 있는지 모른다고 가정하고, 무한루프를 실행합니다.

 

그리고 루프 안에서 feof함수를 호출하면서 파일에 끝에 도달하는지 검사합니다.

 

만약 feof함수가 0이 아니면 한글자씩 꺼내서 출력합니다.

 

마지막에 파일스트림을 제거하고 프로그램을 종료시킵니다.

 

결과를 보시면, 이전에 저장했던 데이터들을 그대로 꺼내서 출력해주고 있는걸 확인할 수 있습니다.

 

마지막에 파일에 끝에 도달하면 feof가 0이 아닌 다른값을 리턴하므로 리드를 종료합니다.

Comments