POST

C언어 스트림(stream)의 이해

입력과 출력이란?

우선 스트림에 대해 알기전에 '입력'과 '출력'은 무엇을 뜻하는지 알아야한다.


데이터의 입력과 출력은 프로그램의 흐름을 뜻하는 것이다. 따라서,

프로그램을 중심으로 프로그램에서 밖으로 나가면 출력이고 밖에서 프로그램으로 들어오는 것을 입력이라 한다.


여기서 입력의 대표적인 예로 키보드가있으며 파일도 입력 대상이 될수 있다. 출력에는 대표적으로 모니터이며 또 파일이 출력 대상이 될수 있다.

입력과 출력의 대상은 매우 넓으며 포괄적인 의미가 담겨져있다.


자, 그렇다면 여기서 이것들이 입출력을 할 수 있는 이유는 무엇일까?

바로 스트림이 있기에 가능한 것이다.


스트림은 이처럼 서로다른 객체들을 이어주는 다리와 같은 역할을 한다.


스트림의 생성과 소멸


우리는 지금까지 printf함수와 scanf함수를 자주 호출 했었는데 스트림의 생성과 관련된 코드는 보지 못햇을 것이다. 그리고 어떻게 요구해야 하는지도 모를것이다.

이 이유는 콘솔(일반적으로 키보드와 모니터를 의미) 입출력을 위한 '입력 스트림'과 '출력 스트림'은 프로그램이 실행되면 자동으로 생성되고, 프로그램이 종료되면 자동으로 소멸되는  스트림이다.


이둘은 기본적으로 제공되는 '표준 스트림(Standard Stream)'이며 여기에는 '에러 스트림'이라는 것도 함께 포함 되어 있다.

각각의 이름은 아래와 같다.


stdin    표준 입력 스트림 - 키보드 대상으로 입력

stdout    표준 출력 스트림 - 모니터 대상으로 출력

stderr    표준 에러 스트림 - 모니터 대상으로 출력

stdout과 stderr를 보면 알겟지만 둘은 거의 차이가 없으며 같은 역할을 한다. 나중에 '입출력 라다이렉션(redirection)'이라는 기술을 익히게 되면 구분을 할 수 있다.


그리고 한가지 유의할 점은 스트림은 양방향의 흐름이 아니며 단방향이다. stream의 사전적인 뜻은 시내, 개울, 물 줄기이며 이처럼 입력은 입력 출력은 출력 각각의 스트림으로 구분되어 데이터가 흐른다.