C에서 파일 끝까지 읽기
이 기사에서는 C 프로그래밍 언어를 사용하여 파일에 쓰고 완전히 읽을 때까지 읽는 방법을 설명합니다.
C의 End of File (EOF)
개요
EOF
는 end 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()
을 사용하여 파일을 엽니다. 읽고 쓰기 위해 파일을 만들거나 열 수 있습니다.
따라서 파일 이름과 모드 w
는 fopen()
함수에 제공하는 매개변수가 됩니다. 문자 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 키를 다시 한 번 누르십시오.
출력:
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