ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 표준 O/I (getchar, putchar)
    C언어 2020. 2. 16. 08:00

    현재 다룰내용은 앞서 설명한 C에서 제공하는 콘솔을 통해 입력과, 출력을 도와주는 표준 입출력 합수에 대해서 알아볼 것이다.

    C에서 문자를 입력받는 가장 쉬운 방법은 getchar 함수를 통해 문자를 입력받는 것이다.

    위와 같이 코드를 작성한 뒤 키보드로 문자 하나를 입력한 뒤 엔터를 치는 순간 입력한 문자가 모니터로 출력되는 것을 볼 수 있다. 이때 이루어진 일은 콘솔 창에서 사용자의 입력을 기다리면서 사용자가 문자와 엔터를 입력하는 순간 getchar 함수는 입력받은 문자를 반환하여 char 형 변수 ch1이라는 곳에 담아서 저장하였다. 그 뒤 putchar함수를 통해 getchar 함수가 반환한 값이 있는 ch1 변수의 값을 putchar 함수의 매개변수로 넣어서 입력한 정보가 출력되는 것을 볼 수 있다. 

    문자를 입력과 출력하는 함수의 사용에 대해서 알아보았다. 그렇다면 내부적으로는 어떻게 동작하여 문자를 입력을 받았고 출력을 하는 가? 에대해서 다룰 것이다. 본격적으로 입출력 과정의 내부에 대해서 다루기 전에 알아야할 개념이 있다. 버퍼, 버퍼링, 플러싱의 개념이다.

    버퍼 : 임시 기억장소 (메모리)

    버퍼링 : 버퍼를 채우는 것

    플러싱 : 버퍼를 비우는 것

    한가지 예시를 보자

    A라는 사용자가 유튜브 다운로드 서비스를 이용한다고 가정했을 때의 과정을 살펴보자 사용자는 클릭하는 행위를 통해 유튜브 서버에 요청을 보낼 것이고 요청을 받은 서버는 클라이언트에게 요청한 정보를 반환해 줄 것이다. 이때 반환하는 정보의 크기가 100MB라고 가정한다면 100MB를 HDD, SSD같은 보조 기억장치에 담는다면 이는 다운로드가 될 것이다. 또한 다운로드가 완성이 된다면 인터넷과 상관 없이 자료를 출력하는 것에 있어서 문제가 없을 것이다. 

    하지만 동영상 스트리밍 서비스라면 ? 유튜브 서버에 동영상 스트리밍 서비스에 대한 요청을 보내게 되면 클라이언트 측에서는 가장 먼저 일정 크기의 메모리를 확보한다 (임시) 이때 확보한 메모리의 크기가 5MB라고 본 뒤 해당 메모리의 크기에 담긴 자료로 10초 분량의 동영상 재생이 가능하다고 가정했을 때 유튜브 서버에서는 100MB 크기의 정보를 순차적으로 나누어서 전송하게 되고 전송 받은 정보는 클라이언트가 확보한 일정 크기의 메모리에 정보를 차곡차곡 받아 온다. 이때 동영상 재생 버튼을 누르면 버퍼에 있는 자료를 읽어와 화면에 출력해주는 것이다. 또한 자료를 읽어 오면서 확보한 메모리에 여분의 공간이 생기고 이 공간을 다시 서버에서 받아온 정보로 채우는 것이다. 

    위의 자료와 같은 과정을 통해 스트리밍 서비스는 이루어진다고 볼 수 있으며 흔히 설명하는 버퍼링이 생겼다는 의미는 네트워크 통신간에 불안정으로 인해 재생시 일정 하게 메모리의 정보를 불러오는데 이때 메모리에 더이상 불러올 정보가 없을 때 스트리밍 서비스가 끊어지는 것을 의미한다.

    따라서 잠시 인터넷 연결이 중단 되더라도 기존에 받아온 메모리의 정보가 있으므로 재생은 문제없이 수행되며 다시 인터넷이 연결 되고 자료를 받아 오는 과정을 통해 일시적은 네트워크 장애 상황에서도 사용자는 끊김없이 스트리밍서비스를 이용할 수 있다. 

    그렇다면 메모리에 정보가 있는 상태로 다른 동영상을 시청하고 싶을 때는 어떻게 하는가? 간단하다 기존에 메모리에 있던 정보를 전부 없애고 다시 처음부터 버퍼링 과정을 통해 새로운 영상을 시청하게 된다.

    위에서 설명한 메모리의 개념이 버퍼이며, 버퍼에 자료를 채우는 과정을 버퍼링이라고 한다. 기존에 버퍼의 내용을 전부 없애는 과정을 플러싱이라고 한다.

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

    문자(배)열 과 gets, puts (문자열 I/O 함수) 함수  (0) 2020.02.18
    getchar 함수와 동작 원리 (버퍼링)  (0) 2020.02.16
    C언어 표준 O/I  (0) 2020.02.16
    문자와 문자열  (0) 2020.02.16
    실수 자료형의 표현  (0) 2020.02.16

    댓글

Designed by Tistory.