1. 스트림(Stream) 이란?
※ 영어 뜻으로는, `흐르는 좁은 시냇물` 등을 의미
ㅇ [데이터 관점]
- 일반적으로, 데이터,패킷,비트 등의 일련의 연속성을 갖는 흐름을 의미
. 음성,영상,텍스트 등의 작은 데이터 조각들이 하나의 줄기를 이루며,
. 순서대로 물 흐르듯이 전송되는 데이터 열(列)
ㅇ [프로세스 관점]
- 원격 호스트 상호 간에 또는 동일 호스트 내에 존재하는,
- 장치 또는 프로세스 들의 상호 간에 이루어지는 통신에서,
- 큐에 의한 메세지 전달방식 등을 이용한,
- 가상 연결 통로 또는 이를 구현한 소프트웨어 모듈
2. 동영상 재생 기술에서의 스트림
※ ☞ 스트리밍 (Streaming) 참조
- 점진적 다운로드하며 재생하는 방식
3. 암호화 방식에서의 스트림
※ ☞ 스트림 암호 (Stream Cipher) 참조
- 비트/바이트/단어들을 순차적으로 암호화하는 방식
4. 다중안테나 방식에서의 스트림
※ ☞ 공간 스트림 (Spatial Stream) 참조
- 다중 안테나에 의해 공간 속을 데이터가 연속 흐르는 통로로 간주되는 라디오 링크
5. 운영체제 상의 스트림
ㅇ 스트림 사용 이유
- 물리 디스크상의 파일,장치들을 통일된 방식으로 다루기 위한 가상적인 개념이 필요
. 따라서, 스트림은 어디서 나왔는지 어디로 가는지 신경을 쓸 필요없이,
. 자유롭게, 어떤 장치,프로세스,파일들과 연결될 수 있게 하므로써,
. 프로그래머에게 많은 편리성 줌
ㅇ 스트림 처리 상의 특징
- 장치 독립적 임
. 장치든 파일이든 프로세스이든 상관없음 (어떤 것과도 연결될 수 있음)
- 버퍼 사용
. 대부분, 스트림이 버퍼라는 임시 저장 공간을 갖고 있어서,
. 일정량을 모아두었다가, 시스템 효율을 고려하여 큰 데이터 덩어리 씩 처리하게 됨
. 주로, CPU와 입출력 장치 간의 속도 차이 때문에 버퍼를 경유하게 함
- 바이트 스트림
. 읽고 쓸 때 바이트 단위로 이루어짐
ㅇ 스트림 사용 例)
- 어떤 프로그램이, 파일,디바이스 등을 읽으려면,
. 운영체제 커널에게, 이곳에 스트림을 연결토록, 시스템콜로써 요청하게 됨
- 스트림 연결을 폭넓게 적용 가능
. 즉, 장치 간 (장치파일), 네트워크 양단 간 (소켓), 프로세스 간 (파이프)에도,
.. 스트림 연결이 가능함
6. 프로그래밍 언어상의 스트림
ㅇ [C 언어]
- 유닉스 운영체제와 밀접한 관련있는, C 언어 프로그램은,
. 입출력을 데이터 스트림으로 해석함
- 입출력 통로
. C 프로그램은, 프로그램 외부와 스트림 형식을 통해서 만 상호작용을 함
- 처리 단위
. 크게, 바이트(텍스트) 스트림 및 바이너리(이진) 스트림으로 구분 처리
- 표준 스트림 : stdin, stdout, stderr ☞ 파일기술자 참조
. 따로, 스트림을 열 필요 없이 바로 사용 가능토록, 항상 열려있음
. (표준 입력 스트림 : stdin, 표준 출력 스트림 : stdout, 표준 에러 스트림 : stderr)
- 파일 스트림
. 파일 입출력시, 표준 스트림 처럼 자동으로 스트림이 생성되지 않고,
.. 반드시, 먼저 스트림을 생성시켜야 함
. 내부적으로, 운영체제 커널에, 파일에 연결된 스트림을 만들도록,
.. 시스템 호출을 통해 의뢰함
. [참고] ☞ 파일 포인터, C 파일 처리 함수, Redirection 등 참조
. 파일 스트림을 다룰 때 사용하는 자료 구조 : 파일 구조체 (FILE)
ㅇ [C++ 언어]
- 표준 입력 스트림 객체 : cin
- 표준 출력 스트림 객체 : cout
. 사용 例) cout.flush(); cout << "Hello World!";