스트림은 어디에서 다루는 주제인가요???

inviolable의 이미지

스트림... 여러번 들어보긴 했는데 스트림 자체가 뭔지에 대해 설명해준 책은 아직 읽어보질 못했습니다.

현재 유닉스 프로그래밍 책을 읽고 있는데(류광님이 번역하신 유닉스 고급 프로그래밍 제 2판) 5장에 표준 입출력에 대한 내용이 나오는데 스트림에 대한 내용이 자주 다루어집니다. 헌데 정작 스트림이 뭔지에 대한 설명이 전혀 없네요... 스트림이 기초적인 내용이라 그럴까요... 제가 한단계 정도 건너 뛴걸까요...

스트림이 뭔지에 대해 다루는 곳이 어디인지 궁금합니다. c언어 기본서 정도에 나와있을까요??? 인터넷 찾아서 알아갈 수도 있는 문제이지만 제가 한단계 이상 건너뛴 것 같은 느낌이 들어서요... 설명을 전혀 안한다는 것은...

아무튼 답변 부탁드립니다.

tower119의 이미지

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이 됩니다.....ㅡ,ㅡ

inviolable의 이미지

스트림은 보통 FILE형으로 지정되지 않습니까??? 그럼 스트림을 파일 포인터로 지정한다는 것은 그 파일에 대한 데이터의 흐름이라고 이해하면 될까요???

inviolable의 이미지

시간 날때 틈틈히 읽어보겠습니다.

ymir의 이미지

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 』

lithium81의 이미지

스트림 = 데이터의 흐름을 묘사한 '추상적'인 개념

위 표현 정말 마음에 드네요.

- 어제보다 나은 오늘, 오늘보다 나은 내일.

inviolable의 이미지

답변 감사합니다~.

HDNua의 이미지

예전에 제가 스트림에 대해 생각해본 걸 블로그에 올렸는데, 도움을 드릴 수 있을 것 같습니다.
http://blog.naver.com/rbfwmqwntm/30111773111

저는 이렇게 생각했습니다.

inviolable의 이미지

답변 감사합니다~.

cinsk의 이미지

순차적으로 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라고 합니다.

inviolable의 이미지

상세한 답변 감사드립니다...^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.