인프런 커뮤니티 질문&답변

xk130님의 프로필 이미지
xk130

작성한 질문수

홍정모의 따라하며 배우는 C언어

8.7 입력 스트림과 숫자

입력버퍼에 저장되는 시점

작성

·

445

0

사용자의 입력이 언제 버퍼에 입력되는지 정확하게 알고싶습니다. 

교수님께서 글자 하나하나 입력 될때마다 입력버퍼에 저장이 되고 엔터를 누르게 되면 버퍼에 저장된 내용이 목적지에 도착한다고 설명하셨는데 다른분들은 엔터가 입력 되어야 버퍼에 입력이 된다고 하셔서 혼란스럽네요.

또한 출력 버퍼의 경우 출력 버퍼가 비워진다는 것은 출력이 됨을 뜻한다고 알고 있습니다. 그렇다면 출력 버퍼는 어느 시점에 비워지게 되는건가요? 

답변 1

1

홍정모님의 프로필 이미지
홍정모
지식공유자

안녕하세요? 본 질문은 8.1에 더 적합한 것 같습니다. 가급적 옮겨주셨으면 좋겠네요. 저에게는 학생의 질문을 수정할 권한이 없습니다.

1. '버퍼'라는 이름은 기본적으로 임시로 데이터를 저장해놓는 메모리에 대해 사용됩니다. 하드웨어 관련된 입출력에서는 우리 컴퓨터의 메인 메모리가 아니라 그 하드웨어에 내장된 메모리를 버퍼로 사용하기도 합니다. 예를 들면 그래픽 카드의 내장 메모리가 있습니다. 모든 데이터는 메모리에 저장이 되어야만 사용할 수 있습니다. 따라서 사용자의 입력이 발생하자마자 어딘가의 메모리에 저장되어야 하고 그런 메모리를 버퍼라고 부르기 때문에 사용자가 입력하자마자 어딘가의 버퍼에 저장되어야만 합니다. 그 버퍼를 우리가 만든 프로그램이 사용할 수 있느냐없느냐는 다른 문제입니다. 왜냐하면 입출력 버퍼를 관리하는 것은 우리의 프로그램이 아니라 운영체제이기 때문입니다. 즉 엔터를 누르는 순간 운영체제가 보기에 "이제 사용자가 입력을 끝냈다고 의사를 표현했으니 버퍼를 프로그램이 접근할 수 있게 해주자"라고 하면서 우리의 프로그램이 버퍼에 접근할 수 있도록 허용해주는 것입니다. 아래 링크도 참고하세요. 

https://www.geeksforgeeks.org/clearing-the-input-buffer-in-cc/

for example in the case of standard input, when we press the key on keyboard, it isn’t sent to your program, rather it is buffered by operating system till the time is allotted to that program.

운영체제가 버퍼를 관리한다는 부분을 고려하지 않고 프로그램이 항상 버퍼에 접근할 수 있다고 가정한다면 엔터를 누르는 순간 버퍼에 데이터가 들어오는 것으로 생각할 수도 있습니다. 

p. 483

https://repository.dinus.ac.id/docs/ajar/Operating_System.pdf

여기도 참고하세요.

2. 버퍼를 비우는 것도 운영체제 담당입니다. 운영 체제 입장에서는 같은 데이터를 프로그램이 (실수로) 두 번이상 받아들이는 경우가 발생하지 않아야 하기 때문에 프로그램이 데이터를 다 사용했다면 바로바로 지워주는 책임을 가지고 있겠죠. 구체적으로 운영체제가 어떻게 버퍼를 관리하는 지에 대해서는 운영체제의 영역이고 운영체제도 다양해서 (예: 리눅스, 윈도우, 안드로이드 등) 그 이상은 각 운영체제 관련 문서를 따로 봐야할 것 같습니다.

xk130님의 프로필 이미지
xk130

작성한 질문수

질문하기