C언어 - 스트림, 버퍼, 버퍼링

Programming/C 2016. 6. 21. 12:48

<스트림(stream)>

스트림이란 데이터를 입력하고 출력하기 위한 다리이다.

키보드 ---- 프로그램 ---- 모니터

이 세개는 전혀 다른 개체이다.

그렇다면 이 사이에 연결하려면 다리같은 것이 필요한데 그것이 스트림이다. ---- 이것이 스트림...

키보드로 데이터를 입력하면 표준 입력 스트림이 필요하고, 모니터로 데이터를 출력하려면 표준 출력 스트림이 필요한 것이다. 스트림은 운영체제에 의해서 만들어지는 것인데, 그냥 가상의 다리?라고 생각하자.

stdin : 표준 입력 스트림을 가리키는 다리이름.

stdout : 표준 출력 스트림을 가리키는 다리이름.

 

그렇다면 과연 이것들은 언제 생성되고 소멸될까?

그것은 바로 해당 프로그램 시작시 생성시키고, 종료시 소멸시킨다.

키보드 --(stdin)--> 프로그램 --(stdout)--> 모니터

이런 방식으로 우리는 여태껏 printf()scanf()를 사용하면서 스트림을 만들었다.

 

그렇다면 이 방법을 파일에다가 적용시키면 어떻게 될까?

파일 --(파일 입력 스트림)--> 프로그램 --(파일 출력 스트림)--> 파일

이렇게 나타낼 수 있을 것이다.

 


<버퍼(buffer)>

버퍼란 처리할 데이터를 임시로 저장하는 저장소이다. ... 데이터 처리속도와 생성속도가 다르면 어떻게 될까? 무조건 낮은 쪽에 맞춰줘야한다. 이렇게 되면 너무 손해보는 장사가 아닐까...

이런 단점을 없애기 위해 버퍼라는 것이 존재한다. 그 속도차이를 메워 주기 위한 임시 저장공간인 것이다.

키보드 --(stdin)--> 입력버퍼에 저장 ----> 프로그램

프로그램 ----> 출력버퍼에 저장 --(stdout)--> 모니터

 


<버퍼링(buffering)>

버퍼링이란 버퍼를 활용하는 방식 또는 버퍼에 저장하는 것을 말한다. 예를 들어 프린터와 같은 출력 장치로 데이터를 전송한다고 가정하자. 그렇다면 프린터로 그 데이터들이 가기전에 버퍼라는 공간에다가 데이터를 잠시 저장해준다. 직관적으로 봐도 모니터가 출력해나가는 속도와 컴퓨터가 데이터를 전송하는 속도는 어마어마한 차이가 있기 때문이다. 이 속도 차를 줄여주기 위해 있는 것이 버퍼이다.

posted by 경원구