표준 입출력과 버퍼

김신·2023년 1월 16일
0
post-thumbnail

표준 입출력 기반의 버퍼

C언어의 표준 입출력 라이브러리의 함수를 통해 데이터를 입출력하면 해당 데이터들은 운영체제가 제공하는 메모리 버퍼를 통과하게 된다. 메모리 버퍼는 데이터를 임시로 보관하는 메모리 공간이다. 키보드를 통해 입력되는 데이터는 일단 입력버퍼에 저장된다. 그리고 그 후 조건에 의해 프로그램에서 읽혀진다. 키보드로부터 입력된 데이터가 입력 스트림을 거처 입력 버퍼로 들어가는 시점은 엔터 키를 누르는 시점이다.

버퍼를 사용하는 이유

두 개체의 실행 속도의 간극의 비효율성을 해결하기 위해서이다. 표준입력 및 출력을 기다리는 동안 CPU는 많은 일을 할 수가 있다. 그렇기 때문에 그 시간 동안 CPU가 다른 일을 하도록 하고 버퍼의 일정 비율 이상 혹은 개행문자가 입력되면 CPU가 데이터를 처리하도록 한다.

입력버퍼 비우기

키보드를 통해 'HELLO'라는 문자열과 엔터를 누르면 입력 버퍼에 H E L L O '\n'이 차례로 담긴다. 그리고 표준 출력을 얼마나 하느냐에 따라 '\n'이 함께 출력될 지가 정해진다. '\n'을 의도대로 처리하려면 getchar() 혹은 getc()를 사용한다.

#include <stdio.h>
int main()
{
	char id[7];
	char name[10];

	fputs("주민번호 앞 6자리 입력: ", stdout);
	fgets(id, sizeof(id), stdin);
	getchar();

	fputs("이름 입력: ", stdout);
	fgets(name, sizeof(name), stdin);

	printf("id: %s\n", id);
	printf("name: %s\n", name);

	return 0;
}

위 코드는 표준 입력으로 6자리 문자 후 '\n'를 입력받는다. 이 때 입력 버퍼에는 총 7개의 문자가 있으므로 id를 입력버퍼에서 가져간 이후 버퍼에는 '\n'가 남게 된다. 다음에 버퍼에서 읽어내릴 때 '\n'을 함께 읽는것을 방지하기 위해 getchar()를 통해 '\n'를 버퍼로부터 비워주는 작업을 했다.

0개의 댓글