C에서 파일 끝까지 읽기

Waqar Aslam 2023년10월12일
  1. C의 End of File (EOF) 개요
  2. C에서 파일 처리
  3. EOF를 사용하여 C에서 파일 끝까지 읽기
C에서 파일 끝까지 읽기

이 기사에서는 C 프로그래밍 언어를 사용하여 파일에 쓰고 완전히 읽을 때까지 읽는 방법을 설명합니다.

C의 End of File (EOF) 개요

EOFend of file의 줄임말입니다. 파일의 끝에 도달했으며 이 지점 이후에는 더 이상의 데이터가 없음을 나타냅니다.

Ctrl+D는 파일 끝 조건을 유도하기 위해 Linux 및 OS X 컴퓨터에서 입력해야 하는 문자입니다. Windows의 단축키는 Ctrl+Z입니다.

이 문자는 줄의 첫 번째 문자, 즉 ENTER 다음의 첫 번째 문자인 경우에만 작동합니다. 그러나 이에 대한 요구 사항은 운영 체제에 따라 다릅니다.

시스템은 사용자가 ENTER를 입력할 때까지 EOF 문자를 인식하지 못할 수 있습니다. 콘솔 입력은 일반적으로 라인 지향적이기 때문입니다.

C에서 파일 처리

그렇게 하도록 선택하면 많은 영구 데이터가 파일에 저장됩니다. 다른 많은 프로그래밍 언어와 마찬가지로 C에는 다음과 같은 파일 관리 기능이 있습니다.

  • 파일 만들기

    fopen().을 사용하여 새 파일 만들기

  • 파일 열기

    fopen().을 사용하여 이미 존재하는 새 파일을 엽니다.

  • 파일 읽기

    fscanf() 명령을 사용하여 파일에서 데이터 블록을 읽습니다. getc()는 파일에서 한 번에 한 문자씩 읽는 명령이며 getw() 메서드를 사용하여 파일에서 정수를 읽습니다.

  • 파일에 쓰기

    fprintf()는 데이터 블록을 파일에 쓰는 데 사용됩니다. putc() 명령은 단일 문자를 파일에 기록하고 putw()는 파일에 정수를 기록하는 약어입니다.

  • 파일 닫기

    fclose() 명령으로 파일을 닫는 과정.

EOF를 사용하여 C에서 파일 끝까지 읽기

모든 관리 기능을 사용하여 파일을 끝까지 읽는 예를 살펴보겠습니다.

시작하려면 먼저 main() 함수를 구성한 다음 계속 진행하기 전에 필요한 라이브러리를 가져와야 합니다.

#include <stdio.h>

int main() {}

메인 함수 내부에 fp라는 변수를 선언합니다. 이 변수는 file. 유형을 참조하는 파일 포인터가 됩니다.

FILE* fp;

ch라는 이름의 변수와 * name 레이블이 붙은 이름 포인터를 만듭니다. 둘 다 char 데이터 유형이어야 합니다. 이름 포인터에는 파일 이름이 포함되어야 합니다.

char ch;
char* name = "eof.txt";

이제 내장 함수 fopen()을 사용하여 파일을 엽니다. 읽고 쓰기 위해 파일을 만들거나 열 수 있습니다.

따라서 파일 이름과 모드 wfopen() 함수에 제공하는 매개변수가 됩니다. 문자 W는 파일이 현재 상황에서 쓰기 모드로 열려 있음을 나타냅니다.

fp = fopen(name, "w");
printf("Enter the text to write on the file\n");

파일이 시스템에서 아직 사용 가능하지 않은 경우 먼저 생성된 다음 열립니다. 시스템에 파일이 존재하는 경우 이 방법은 파일을 즉시 열 것입니다.

EOF 변수를 활용하여 파일 끝에 도달할 때까지 계속 반복되는 while 루프를 구현합니다. 루프 내에서 putc() 함수를 사용하고 char 유형에 대해 ch 매개 변수와 파일 유형에 대해 *fp 매개 변수를 전달하여 사용자가 제공한 텍스트를 작성합니다.

while ((ch = getchar()) != EOF) {
  putc(ch, fp);
}

파일에 텍스트를 작성했습니다. fclose() 함수를 사용하여 파일을 닫겠습니다.

fclose(fp);

다음 단계는 파일을 읽고 해당 정보를 콘솔에 표시하는 것입니다. 사용자에게 메시지를 표시하는 것으로 시작합니다.

printf("\nText wrote on the file `%s`:\n", name);

fopen() 함수를 사용하여 파일을 다시 열 것이지만 이번에는 모드를 r로 제공할 것입니다. 이는 파일이 읽기 모드에서 열렸음을 나타내기 때문입니다.

fp = fopen(name, "r");

EOF 변수를 활용하여 파일 끝에 도달할 때까지 계속 반복되는 while 루프를 구현합니다. 열린 파일의 루프 안에 written 문자를 인쇄합니다.

while ((ch = getc(fp)) != EOF) {
  printf("%c", ch);
}

feof() 메서드를 사용하여 파일 쓰기가 완료되었는지 여부를 확인합니다. 이 경우 사용자에게 메시지를 제공합니다.

if (feof(fp)) printf("\nReached to the end of file.");

파일의 텍스트를 읽었습니다. fclose() 함수를 사용하여 파일을 닫겠습니다.

fclose(fp);

완전한 소스 코드:

#include <stdio.h>

int main() {
  FILE* fp;
  char ch;
  char* name = "eof.txt";

  fp = fopen(name, "w");

  printf("Enter the text to write on the file\n");
  while ((ch = getchar()) != EOF) {
    putc(ch, fp);
  }
  fclose(fp);

  printf("\nText wrote on the file `%s`:\n", name);
  // reading
  fp = fopen(name, "r");
  while ((ch = getc(fp)) != EOF) {
    printf("%c", ch);
  }

  if (feof(fp)) printf("\nReached to the end of file.");

  fclose(fp);
  return 0;
}

파일에 쓰려는 텍스트를 입력한 후 ENTER 키를 누르고 Ctrl+Z 키를 누른 다음 계속하려면 ENTER 키를 다시 한 번 누르십시오.

출력:

파일 끝까지 읽기

작가: Waqar Aslam
Waqar Aslam avatar Waqar Aslam avatar

I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.

LinkedIn

관련 문장 - C File