스트림은 어디에서 다루는 주제인가요???
글쓴이: inviolable / 작성시간: 금, 2012/10/26 - 9:20오후
스트림... 여러번 들어보긴 했는데 스트림 자체가 뭔지에 대해 설명해준 책은 아직 읽어보질 못했습니다.
현재 유닉스 프로그래밍 책을 읽고 있는데(류광님이 번역하신 유닉스 고급 프로그래밍 제 2판) 5장에 표준 입출력에 대한 내용이 나오는데 스트림에 대한 내용이 자주 다루어집니다. 헌데 정작 스트림이 뭔지에 대한 설명이 전혀 없네요... 스트림이 기초적인 내용이라 그럴까요... 제가 한단계 정도 건너 뛴걸까요...
스트림이 뭔지에 대해 다루는 곳이 어디인지 궁금합니다. c언어 기본서 정도에 나와있을까요??? 인터넷 찾아서 알아갈 수도 있는 문제이지만 제가 한단계 이상 건너뛴 것 같은 느낌이 들어서요... 설명을 전혀 안한다는 것은...
아무튼 답변 부탁드립니다.
Forums:
위키에 나와있네요.
http://ko.wikipedia.org/wiki/스트림_(컴퓨팅)/
http://www.winapi.co.kr/clec/cpp2/17-2-1.htm
위키에
컴퓨터 처리 환경에서 스트림(stream)은 시간이 지남에 따라 사용할 수 있게 되는 일련의 데이터 요소들 가리키는 수많은 방식에서 쓰인다.
C 프로그래밍 언어에 기반을 둔 유닉스 관련 시스템에서 스트림은 개별 바이트나 문자열인 데이터의 원천이다. 스트림들은 파일을 읽거나 쓸 때, 네트워크 소켓을 거쳐 통신할 때 쓰이는 추상적인 개념이다. 표준 스트림들은 모든 프로그램에 이용할 수 있는 세 개의 스트림을 말한다.
이렇게 나와있네요.
연속적인 데이터의 흐름을 추상화 시킨 말이라 생각됩니다.
여담으로 MPEG System에서 TS라는 컨테이너가 있는데 TS의 스트림을 TS Stream이라고 합니다.
그런데 이 약자를 풀어보면 Transport Stream Stream이 됩니다.....ㅡ,ㅡ
답변 감사합니다.
스트림은 보통 FILE형으로 지정되지 않습니까??? 그럼 스트림을 파일 포인터로 지정한다는 것은 그 파일에 대한 데이터의 흐름이라고 이해하면 될까요???
데니스 리치가 쓴 페이퍼를 한번 읽어보시는 것이 어떨까요.
저도 다는 안 읽었습니다.
http://cseweb.ucsd.edu/classes/fa01/cse221/papers/ritchie-stream-io-belllabs84.pdf
답변 감사합니다.
시간 날때 틈틈히 읽어보겠습니다.
음 ..
stream 은 data 의 흐름을 묘사한 추상적인 개념으로, 그냥 byte sequence 로 보시면 될 것 같습니다.
file (device 포함) 에 읽거나 쓸 때, network 를 통해 data 를 주고 받을 때.. 뭐 그런 data 의 흐름을 stream 이라고 부르죠.
standard stream 을 예로 들면, 전통적으로 *nix 의 file 들은 stdin, stdout, stderr 세 개의 stream 을 갖고 있는데...
stdin 은 read 에 의해, 나머지는 write 에 의해 제어 됩니다.
그냥 수도관과 그에 달려 있는 수도 꼭지를 상상하시면 되겠네요.
수도관에 물이 비어 있으면, read 를 호출해도 아무런 데이터가 나오지 않을 테고..
반대로 write 를 호출해서 수도관으로 물을 흘려 보내기 시작할 수도 있겠죠.
또, read 를 호출할 때에는 내 맘대로 한 방울씩 받을 수도 있고, 한 바가지씩 받을 수도 있죠. (write 도 마찬가지)
굳이, 수도관과 다른 점을 찾는다면, 순서(sequence) 가 있다는 것.
이쯤 되면 왜 TCP 를 stream 이라고 부르는지도 이해가 가실 것으로 보입니다.
좀 더 예를 들어 보면..
$ ps -ef | grep myprog
와 같이 pipe 를 써 보셨을 겁니다.
ps 라는 프로그램의 stdout 에 pipe 를 대서 grep 이라는 프로그램의 stdin 으로 붙인겁니다.
두 개의 수도관에 파이프를 댄 거죠.
$ ps -ef > result.txt
ps 의 output stream 을 tty 대신 result.txt 라는 파일로 변경한 것입니다. (stream redirection)
ps 의 결과가 터미널에 결과가 출력되는 대신 파일에 저장되겠죠.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
스트림 = 데이터의 흐름을 묘사한 '추상적'인
스트림 = 데이터의 흐름을 묘사한 '추상적'인 개념
위 표현 정말 마음에 드네요.
- 어제보다 나은 오늘, 오늘보다 나은 내일.
답변 감사합니다.
답변 감사합니다~.
예전에 제가 스트림에 대해 생각해본 걸 블로그에
예전에 제가 스트림에 대해 생각해본 걸 블로그에 올렸는데, 도움을 드릴 수 있을 것 같습니다.
http://blog.naver.com/rbfwmqwntm/30111773111
저는 이렇게 생각했습니다.
답변 감사합니다~.
답변 감사합니다~.
순차적으로 byte 또는 character를 접근하는
순차적으로 byte 또는 character를 접근하는 interface 또는, 그 data를 stream이라고 하는 것은 일반적인 내용이며,
UNIX에서 (특별한 수식어 없이) stream 또는 stream IO라고 하면 FILE structure를 쓰는 모든 IO를 (fopen/fclose/fread/fwrite 등) 말합니다.
반대로 file descriptor (fd)를 쓰는 interface (open/close/read/write)는 low-level IO라고 합니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
그렇군요...
상세한 답변 감사드립니다...^^
댓글 달기