본문 바로가기

스트림

1. 입력과 출력

 

그동안 입력이라는 말과 출력이라는 말을 꽤 많이 사용해 왔다. 그렇다면 다음과 같은 질문에 답할 수 있을까?

 

무엇이 입력인가?

무엇이 출력인가?

 

입력은 무언가가 들어가는 것이고, 출력은 무언가가 나오는 것이다. 

결국 중요한 것은 어디서 들어가는, 어디서 나오는가다.

그리고 어디, 그러니까 기준이 되는 곳은 프로그램이다.

 

 scanf  함수는 키보드로부터 입력받는다. 다시 말해 키보드에서 프로그램으로 입력받는다.

 printf  함수는 모니터로 출력한다. 다시 말해 프로그램에서 모니터로 입력받는다. 

 

 

 

 

2. 스트림

 

그런데 어떻게 키보드에서 입력한 내용이 프로그램으로 전달되는 걸까?

프로그램과 키보드가 뭔가 통신이라도 하는 걸까?

 

프로그램과 키보드, 프로그램과 모니터는 기본적으로 떨어져 있다. 연결되어 있지 않다는 말이다. 따라서 키보드에서 프로그램으로 입력하거나, 프로그램에서 모니터로 출력하기 위해서는 이들을 연결하는 매개체가 필요한데, 이 매개체가 스트림(stream)이다. 

 

따라서 입출력은 다음과 같은 구조로 이루어진다고 생각할 수 있다.

 

프로그램과 키보드를 연결하는 스트림이 있고 프로그램과 모니터를 연결하는 스트림이 있는 것을 알 수 있다. 키보드로부터 입력받기 위한 입력 스트림(input stream)과 모니터로 출력하기 위한 출력 스트림(output stream)이 있는 것을 알 수 있다.  scanf  함수로 입력받을 때는 입력 스트림을,  printf  함수로 출력할 때는 출력 스트림을 사용한다.

 

스트림은 운영체제에서 제공하는 소프트웨어로 구현되어 있는 가상의 연결장치다. 다시 말해 운영체제가 외부 장치와 프로그램을 연결하는 스트림을 제공한다.

 

스트림에는 단방향의 흐름이라는 의미가 내포되어 있다. 데이터는 한 방향으로만 전송된다는 것이다. 실제로 입출력 스트림은 각각 한 방향으로만 데이터가 전송된다.

 

 

 

3. 스트림의 생성과 소멸

 

scanf 함수를 호출하면 입력 스트림을 통해 입력받는다. 그런데 scanf 함수를 호출할 때 입력 스트림의 생성에 관한 코드는 작성하지 않는다. 어떻게 된 일일까?

 

콘솔 입출력을 위한 스트림은 프로그램이 실행될 때 생성되어 프로그램이 종료할 때 소멸된다.그러니까 키보드로 입력받는 입력 스트림과 모니터로 출력하는 출력 스트림은 자동으로 생성되고 소멸된다는 것이다. 특히 이 둘은 표준 에러 스트림(standard error stream)과 함께 제공되는 표준 스트림(standard stream)이다. 

 

stdin(STanDard INput stream, 표준 입력 스트림): 키보드로부터의 입력

stdout(STanDard OUTput stream, 표준 출력 스트림): 모니터로의 출력

stderr(STanDard ERRor stream, 표준 에러 스트림): 모니터로의 출력

 

stdout과 stderr는 ⒝입출력 리다이렉션을 사용할 때 구분된다. 기본적으로 모니터로 출력한다는 점은 같다.

 

 

 

 

 

 

 

⒜콘솔(console): 일반적으로 키보드와 모니터를 말한다.

⒝입출력 리다이렉션(― redirection): 입출력을 변경하는 것. 키보드가 아닌 파일로부터 데이터를

  읽어오는 등 다른 위치로 입출력할 때 쓰인다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Programming > C' 카테고리의 다른 글

문자열 입출력 함수  (0) 2019.05.07
문자 입출력 함수  (0) 2019.05.05
void형 포인터  (0) 2019.04.15
함수 포인터  (0) 2019.04.10
2차원 배열과 포인터  (0) 2019.04.09