inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

8.7 입력 스트림과 숫자

입력버퍼에 저장되는 시점

501

xk130

작성한 질문수 6

0

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

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

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

c

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

Export template 안됨

1

65

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

90

3

main 함수에서 왜 int만 선언이 되는걸까요

1

80

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

75

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

78

1

프로토타입과 함수간의 인자 불일치

1

87

2

12.12 헤더 관련 질문

1

74

2

Visual Studio Community 2026 사용 문의

1

170

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

72

2

getchar(), putchar()

1

111

3

강의자리ㅛ

1

93

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

127

2

소스파일안에 여러 파일

1

87

2

F5와 F7의 차이

1

90

2

c = TWO * (a+b); 에서 a와 b는?

1

67

2

; 세미콜론을 붙이는 기준에 문의

1

78

1

Step over 기능 문의

1

64

2

2.6 강의 따옴표 출력 규칙 문의

1

87

2

int main 함수 관련 오류 문의

1

76

2

13.4 words[0]

0

73

2

11.7 함수를 구현해 봤습니다.

1

67

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

71

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

61

2

11.6 fit_str함수를 구현해 봤습니다.

1

59

2