C언어/따배씨 c언어
[8.1] 입출력 버퍼
newbeverse
2022. 11. 3. 23:13
버퍼가 없는 경우와 버퍼가 있는 경우를 위 아래로 나누어서 그림으로 표현한 자료이다.
위
처럼 버퍼가 사용되지 않는 경우엔, 내가 ABC를 입력했을경우, 하나씩 출력되기때문에 A출력 후 B 출력후 C가 출력된다. 가운데 있는 CBA는 확실하게 이해가 안감. (입력된 순으로 출력 한다는 것을 의미하는 듯하지만)
아래
입출력 작업은 속도가 느려서 효율이 안좋기 때문에 버퍼의 개념이 탄생하였다고 한다. 매번 한 글자씩 옮기는 것은 느려서 때가 되면, 즉 버퍼가 가득찼을때 옮기게 된다. 마치 버스처럼 사람을 가득 채우면 다음버스가 올때까지 기다린다.
혹은 버퍼안에 '/n'이 들어오면 버퍼를 보내는 방식으로 약 2가지 정도가 쓰인다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h> //window, getch(), _getche)_
int main()
{
char c;
while ((c = _getche()) != '.')
putchar(c);
return 0;
}
버퍼를 사용하지 않는 _getche() 함수를 사용하면, hello 를 입력했을시, 키보드를 누를때마다 '즉각적으로' 한자씩 출력된다. 예를 들어 hellow를 적으면 hh , ee hheelloo처럼 내가 입력한것 1번 출력된것 한번 총, 2번찍혀서 나오게된다. (e - echo) 이를 제거하기위해 echo를 제외한 _getch() 함수를 사용해도 된다.
반면에 버퍼를 사용하는 getchar 함수는 hellow 를 입력시 엔터를 누르면 hellow 묶어져서 출력된다.
반응형