본문 바로가기
Language&Framework&Etc/C

문자와 문자열 관련 함수(21-1) 스트림과 데이터의 이동

by 머리올리자 2020. 12. 10.

'데이터 입출력'에 대한 개념적 이해

무엇이 '입력'이고 무엇이 '출력'인가?

데이터의 입력과 출력은 프로그램의 흐름을 뜻하는 것임

그렇다면 무엇이 '입력'이고 무엇이 '출력'일까?

 

입력 : 프로그램 안으로 데이터가 흘러 들어오는 것이 입력

출력 : 프로그램 밖으로 데이터가 흘러 나가는 것이 출력

 

대표적 입력 장치 : 키보드, 마우스, 파일...

대표적 출력 장치 : 모니터, 파일...

 

데이터의 이동수단이 되는 스트림

"프로그램상에서 모니터로 문자열을 출력할 수 있는 이유는?"

 

프로그램상에서 모니터와 키보드를 대상으로 데이터를 입출력 하기 위해서는 이들을 연결시켜 주는 다리가 필요하다.

 

이러한 다리의 역할을 하는 매개체를 가리켜 '스트림(stream)'이라 한다.

출력 스트림 : 실행중인 프로그램 - 모니터 연결 

입력 스트림 : 실행중인 프로그램 - 키보드 연결

 

printf 함수와 scanf 함수를 통해서 데이터를 입출력 할 수 있는 근본적인 이유

 

그렇다면 다리의 역할을 하는 스트림의 정체?

 

운영체제에서 제공하는 소프트웨어적인(소프트웨어로 구현되어 있는) 가상의 다리이다.

 

운영체제는 외부장치와 프로그램과의 데이터 송수신의 도구가 되는 스트림을 제공

 

스트림의 생성과 소멸

콘솔(일반적으로 키보드와 모니터) 입출력과 파일 입출력 사이에는 차이점이 있음

 

파일과의 연결을 위한 스트림의 생성은 우리가 직접 요구 O

콘솔과의 연결을 위한 스트림의 생성은 우리가 직접 요구 X

 

"콘솔 입출력을 위한 '입력 스트림'과 '출력 스트림'은 프로그램이 실행되면 자동으로 생성되고, 프로그램이 종료되면 자동으로 소멸되는 스트림"

 

이 둘은 기본적으로 제공되는 '표준 스트림(standard stream)' 이다.

 

stdin 표준 입력 스트림 키보드 대상으로 입력
stdout 표준 출력 스트림 모니터 대상으로 출력
stderr 표준 에러 스트림 모니터 대상으로 출력

 

Stram

스트림은 '한 방향으로 흐르는 데이터의 흐름'을 뜻한다.

즉 스트림이란 단어에는 단 방향으로만 데이터 전송이 이뤄진다는 뜻.

실제로 입출력 스트림도 입력 스트림과 출력 스트림이 구분되어서 한 방향으로만 데이터 흐름을 유지.

 

 

참고 : [윤성우 열혈 C 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.