이 글에서는 Linux의 more 명령어처럼 파일의 내용을 한 번에 일정 분량씩 나누어 화면에 출력하는 C 프로그램을 작성해 보겠습니다.
프로그램은 먼저 화면에 지정된 개수(n)만큼의 줄을 출력한 뒤, 사용자가 Enter 키를 누를 때까지 대기합니다. Enter 키가 입력되면 다음 n줄을 이어서 화면에 표시하는 방식으로 동작합니다.
동작 원리
파일 내용을 이런 방식으로 표시하려면 다음과 같은 절차가 필요합니다.
- 대상 파일을 읽기 모드(
"r")로 열고, 파일 끝(EOF)까지 문자를 하나씩 읽으면서 화면에 출력합니다. - 줄바꿈 문자(
'\n')가 나올 때마다 줄 카운터를 1씩 증가시켜 현재까지 출력한 줄 수를 추적합니다. - 카운터가 n에 도달하면 카운터를 초기화하고
getchar()함수로 사용자의 키 입력을 기다립니다. - 키 입력이 확인되면 다음 n줄을 계속해서 출력합니다.
예제 코드
#include <stdio.h>
void displaytext(char *fname, int n) {
FILE *fp = fopen(fname, "r");
int lineCount = 0, ch;
if (fp == NULL) {
printf("No such file exists\n");
return;
}
while ((ch = fgetc(fp)) != EOF) {
putchar(ch);
if (ch == '\n') {
lineCount++;
if (lineCount == n) {
lineCount = 0;
getchar(); // 사용자가 Enter 키를 누를 때까지 대기
}
}
}
fclose(fp);
}
int main() {
char fname[] = "main.CPP";
int n = 10; // 한 화면에 표시할 줄 수
displaytext(fname, n);
return 0;
}실행 결과
위 예제에서는 존재하지 않는 파일 이름인 main.CPP를 사용했기 때문에 파일을 열지 못하고 다음과 같은 메시지가 출력됩니다.
No such file exists
코드 설명
displaytext() 함수
핵심 로직을 담당하는 함수입니다. fopen()으로 파일을 열고, 반환값이 NULL이면 파일이 존재하지 않는다는 메시지를 출력한 뒤 종료합니다. 파일이 정상적으로 열리면 fgetc()로 문자를 하나씩 읽어 putchar()로 출력하며, 줄바꿈 문자를 만날 때마다 카운터를 증가시킵니다.
페이지 나누기 로직
카운터가 n에 도달하면 getchar()를 호출하여 사용자의 입력을 기다립니다. 사용자가 Enter 키를 누르면 카운터가 0으로 초기화되고, 이후 n줄이 다시 출력됩니다. 이 과정이 반복되면서 마치 more 명령어처럼 파일 전체가 페이지 단위로 표시됩니다.
main() 함수
표시할 파일 이름과 한 페이지당 줄 수(n)를 지정한 뒤 displaytext()를 호출합니다. 실제 사용 시에는 자신이 확인하려는 파일 경로와 원하는 줄 수로 값을 변경하면 됩니다.
마무리
이처럼 간단한 파일 입출력 함수 몇 개만으로도 Linux의 more 유틸리티와 유사하게 동작하는 페이지 뷰어를 구현할 수 있습니다. 필요에 따라 한 페이지당 줄 수를 조정하거나, 'q' 키 입력 시 종료하는 기능 등을 추가하여 더 완성도 높은 프로그램으로 확장할 수도 있습니다.