C에서 feof 함수 사용

Jinku Hu 2023년10월12일
  1. feof기능을 사용하여 C의 파일 스트림에서 파일 끝 표시기를 확인합니다
  2. feofferror함수를 사용하여 C에서 파일 스트림의 유효한 위치 테스트
C에서 feof 함수 사용

이 기사에서는 C에서feof기능을 사용하는 방법에 대한 몇 가지 방법을 설명합니다.

feof기능을 사용하여 C의 파일 스트림에서 파일 끝 표시기를 확인합니다

feof함수는<stdio.h>헤더에 정의 된 C 표준 입력 / 출력 라이브러리의 일부입니다. feof함수는 주어진 파일 스트림에서 파일 끝 표시기를 확인하고EOF가 설정된 경우 0이 아닌 정수를 리턴합니다. FILE포인터를 유일한 인수로 사용합니다.

다음 예에서는feof가 0을 반환 할 때까지 호출되어 파일 스트림이EOF에 도달하지 않았 음을 의미하는getline함수를 사용하여 파일을 한 줄씩 읽을 때를 보여줍니다. 조건문에서getline함수 반환 값을 확인하고 성공한 경우에만printf를 호출하여 읽기 행을 출력합니다.

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

const char* filename = "input.txt";

int main(void) {
  FILE* in_file = fopen(filename, "r");
  if (!in_file) {
    perror("fopen");
    exit(EXIT_FAILURE);
  }

  struct stat sb;
  if (stat(filename, &sb) == -1) {
    perror("stat");
    exit(EXIT_FAILURE);
  }

  char* contents = NULL;
  size_t len = 0;

  while (!feof(in_file)) {
    if (getline(&contents, &len, in_file) != -1) {
      printf("%s", contents);
    }
  }

  fclose(in_file);
  exit(EXIT_SUCCESS);
}

feofferror함수를 사용하여 C에서 파일 스트림의 유효한 위치 테스트

또는feof를 사용하여 파일 내용을 읽기 전에 파일 스트림 위치를 테스트 할 수 있습니다. 이 경우,stat함수 호출로 검색된 파일의 크기를 가져 오는fread호출을 사용하여 파일을 읽습니다. 읽기 바이트를 저장할 버퍼는malloc함수를 사용하여 힙에 할당됩니다. 또한 조건문에ferror기능을 포함하여EOF표시기와 함께 파일 스트림의error상태를 테스트했습니다.

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

const char* filename = "input.txt";

int main(void) {
  FILE* in_file = fopen(filename, "r");
  if (!in_file) {
    perror("fopen");
    exit(EXIT_FAILURE);
  }

  struct stat sb;
  if (stat(filename, &sb) == -1) {
    perror("stat");
    exit(EXIT_FAILURE);
  }

  char* file_contents = malloc(sb.st_size);
  if (!feof(in_file) && !ferror(in_file))
    fread(file_contents, 1, sb.st_size, in_file);
  printf("read data: %s\n", file_contents);

  free(file_contents);

  fclose(in_file);
  exit(EXIT_SUCCESS);
}

ferror도 I/O 라이브러리의 일부이며FILE 포인터 객체에서 호출 할 수 있습니다. 오류 비트가 파일 스트림에 설정되어 있으면 0이 아닌 표시기를 반환합니다. 세 가지 예제 모두filename 변수로 지정된 파일의 내용을 인쇄합니다. 앞의 예시 코드에서 우리는printf 함수를 사용하여 저장된 내용을 출력하지만, 더욱 잘못하기 쉬운 방법은 fwrite 로 호출하는 것으로, 주어진 바이트 수를 네 번째 파라미터가 지정한 FILE 흐름 속에 인쇄할 수 있다.

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

const char* filename = "input.txt";

int main(void) {
  FILE* in_file = fopen(filename, "r");
  if (!in_file) {
    perror("fopen");
    exit(EXIT_FAILURE);
  }

  struct stat sb;
  if (stat(filename, &sb) == -1) {
    perror("stat");
    exit(EXIT_FAILURE);
  }

  char* file_contents = malloc(sb.st_size);
  if (!feof(in_file) && !ferror(in_file))
    fread(file_contents, 1, sb.st_size, in_file);
  fwrite(file_contents, 1, sb.st_size, stdout);

  free(file_contents);

  fclose(in_file);
  exit(EXIT_SUCCESS);
}
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C IO