스트림 Stream ?

 리눅스 프로그래밍에서의 스트림은 바이트의 흐름, 즉 바이트 스트림(byte stream)을 말한다. 스트림을 바이트들이 흘러다니는 길이라고 생각해도 좋다. 스트림은 파일 디스크립터로 표현되고, read()나 write()를 통해 읽고 쓸 수 있다. 예를 들면 파일을 open()하면 read()나 write()를 통해 파일의 내용을 읽거나 쓸 수 있는데, 이것이 바로 스트림인 것이다. 같은 맥락에서 파이프라인이나 소켓도 스트림이다.

 

 

 

 

 

파일에 연결된 스트림

 스트림은 리눅스의 여기저기서 사용된다. 예를 들어 프로세스가 파일의 내용을 읽고 싶다면 어떻게 해야 할까? 파일에 연결된 스트림을 만들도록 커널에(시스템 콜을 사용하여) 의뢰한다. 그리고 다시 시스템 콜을 사용하여 파일의 내용을 읽는다. 스트림에서 바이트 열을 꺼내는 것을 읽는다(read)고 한다. 반대로 바이트 열을 흘려보내는 것을 쓴다(write)고 한다.

 

 

 

 

 

디바이스에 연결된 스트림

 스트림은 이외에도 바이트 열이 흘러갈 수 있는 곳이라면 어떤 것도 스트림에 연결될 수 있다. 예를 들어 SSD나 HDD, 키보드와 같은 하드웨어도 마찬가지다. SSD나 HDD는 바이트 덩어리라고 볼 수 있는 하드웨어이므로 당연히 스트림이 연결될 수 있다. 키보드도 입력된 키를 바이트 열로 보내는 장치이므로 스트림의 끝단에 위치할 수 있다.

파일 시스템에서 살펴본 디바이스 파일은 스트림 연결에 사용된다.

 

 

 

 

 

파이프 pipe

바이트 열이 흘러다니는 곳이 스트림이다. 프로세스에 스트림이 연결되어 바이트 열이 흘러간다. 스트림의 양 끝에 프로세스가 있는 구조의 스트림을 파이프(pipe)라고 한다. 명령어의 출력을 less 명령어로 보거나, grep 명령어로 검색하거나 할 때 파이프를 사용한다.

 

 

 

 

 

네트워크 통신 network communication

스트림이란 바이트 열의 통로다. 바이트 열이 잘 수송될 수 있다면 스트림이 다른 컴퓨터로까지 연결될 수도 있다. 이것이 네트워크 통신이다. 네트워크 통신에서는 프로세스 간 스트림 연결이 많아 스트림의 끝단에 프로세스라고 표시했지만, 파일이 연결될 수도 있다.

프로세스 간 통신 InterProcess Communication, IPC

파이프나 네트워크 통신과 같이 프로세스 간에 스트림을 통해 데이터를 주고받으며 의사소통하는 것을 일반적으로 프로세스 간 통신이라 한다. 스트림은 프로세스 간 통신에 있어 중요한 역할을 수행한다. 그러나 스트림만이 유일한 프로세스 간 통신 방법인 것은 아니다. 예를 들어 POSIX IPC 는 스트림을 사용하지 않는 프로세스 간 통신 기법이다.

+ Recent posts