ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • getchar 함수와 동작 원리 (버퍼링)
    C언어 2020. 2. 16. 08:38

    전 포스트는 표준 입출력 함수 중 하나인 getchar 함수와 putchar 그리고 해당 함수들이 어떤 방식으로 동작하는지 알기 위한 개념인 버퍼, 버퍼링, 플러싱에 대해 알아보았다. 이제부터는 실질적으로 어떻게 동작하는지 살펴보겠다.

    C에서 표준 입출력 함수들은 대부분 버퍼를 이용한 입출력을 수행한다. 즉 콘솔을 통해 자료를 입력받으면 버퍼를 통해 자료를 차례대로 쌓아 두며 출력 시에는 버퍼에 쌓인 자료를 꺼내서 콘솔에 출력한다. 이때 중요한 점이 버퍼는 콘솔에 연결 되어 있다는 점이다. 즉 입력함수를 호출하면 해당 함수는 콘솔에 연결된 I/O 버퍼를 확인해서 해당 버퍼가 비어있는지 확인하고 비어있을 때 사용자로 부터 입력을 받는다.

    버퍼가 비어 있을 시

    1. char ch1 = getchar() 함수 호출 -> 2. 해당 함수는 콘솔에 연결된 입출력 버퍼가 비어 있는지 확인 -> 3. 비어있을 시 입력을 받음  -> 4. 사용자는 test + 엔터 키 입력 -> 5. 입력 받은 값 버퍼에 할당 -> 6. 버퍼에 있는 가장 첫번 째 문자를 변수로 반환 -> 버퍼에 남은 값들은 앞으로 당겨짐

     

    버퍼에 값이 있을 시

    만약 위의 과정에서 문자열을 입력 받았을 시 즉 문자를 입력받는 함수에 문자열을 입력하면 (test) 첫번째 호출시에는 버퍼가 비어있으므로 입력을 받지만 두번째 호출시 당겨진 값인 문자 e가 바로 변수에 할당 된다.

    위의 자료를 보면 ch1 char자료형 변수에 getchar 함수의 반환 값을 할당하였다.

     다음과 같은 출력값을 확인 할 수 있다.

    이는 즉 버퍼가 비어있을때 TEST 문자열 + 엔터를 입력 받은 뒤 가장 먼저 출력하면 ch1에 T 문자가 할당 되어 T가 출력 되었으며 다음 번 함수호출 시 버퍼는 이미 기존에 입력받은 TEST 중 E의 값이 가장 앞에 있기 때문에 E의 값을 변수에 다시 할당하여 E를 출력하는 것을 보여주는 자료이다.

    C언어에서 사용하는 표준 입출력 함수는 앞에 _가 붙지 않는 이상 전부 Buffered I/O를 수행한다.

     

     

    'C언어' 카테고리의 다른 글

    정수의 입력 함수 (scanf), 버퍼의 추상화  (0) 2020.02.19
    문자(배)열 과 gets, puts (문자열 I/O 함수) 함수  (0) 2020.02.18
    표준 O/I (getchar, putchar)  (0) 2020.02.16
    C언어 표준 O/I  (0) 2020.02.16
    문자와 문자열  (0) 2020.02.16

    댓글

Designed by Tistory.