본문 바로가기
컴퓨터 과학(CS)/리눅스

표준 스트림(Standard Stream), 파이프(pipe)

by Bentist 2022. 1. 17.

표준 스트림

위키피디아
유닉스 및 유닉스 계열 운영 체제에서 프로그램(프로세스)과 주변 장치 사이에 미리 연결된 입출력 통로이다.
보통 입출력물리적으로 연결된 시스템 콘솔의 키보드와 모니터를 통해 일어나는데, 표준 스트림은 이것을 추상화한 것이다.

출처: http://www.tcpschool.com/c/c_string_io

 

🔎 키보드와 모니터 같은 장치들의 입출력을 추상화한다는 것은 대체 무슨 뜻일까?

 

예전에는 입출력 장치를 다룰 때 각각의 장치들마다 전용 함수가 존재했다. 전용함수가 존재한다는 것은 어떤 입출력 장치를 사용할 때 어떤 데이터 형식을 사용할 것인지가 이미 정해져 있다는 뜻이다. 예를 들어, 키보드로 키를 입력받는 경우 getch와 같은 콘솔함수를 사용했고 이 함수는 4바이트 정수형 데이터 값을 반환하게 된다. 그래서 다양한 입출력 장치를 사용하기 위해서는 각 장치마다의 전용 함수와 데이터 형식도 다 알고 있어야 했다. 이를 해결하기 위해 모든 입출력의 기반이 되는 스트림이라는 개념이 탄생했다. 모든 입력과 출력을 바이트들의 흐름으로 생각하자는 것이다.
즉, 스트림표준화된 입출력 형식을 제공하는 바이트 기반데이터 흐름이다. 객체지향의 추상화처럼 입출력 장치들의 여러 형식에서 공통적인 기능을 추출하여 표준화된 입출력 형식을 만든 것이다.

 

리눅스에서 프로그램 실행시 기본적으로 3개의 스트림이 자동적으로 열린다.
입력을 위한 스트림(Standard input: stdin), 출력을 위한 스트림(Standard output: stdout), 오류 메시지 출력을 위한 스트림(Standard error, stderr)이며, 이 세 개의 표준 스트림대화형 Shell이 실행되면 자동으로 사용자의 터미널에 부착된다. 그래서 사용자가 터미널에 접속해 로그인하면 대화형 Shell이 실행되면서 자동으로 실행 중인 텍스트 터미널에 표준 스트림이 연결(상속)된다. 이후, 셸에서 실행되는 모든 명령들은 셸을 부모 프로세스로 삼아 세 개의 표준 스트림을 다시 상속 받는다.
별도의 리다이렉션 없이 프로그램을 시작한 경우, 표준 입력 스트림으로 키보드에서 데이터를 받아와 입력 값이 프로그램으로 들어가게 된다. 프로그램에서 데이터가 출발하면 표준 출력 스트림을 통해 출력 장치로 출력을 하게 되는데, 리다이렉션 없이 표준 출력은 프로그램을 시작한 텍스트 터미널이 된다.

리다이렉션(redirection)

컴퓨팅에서 표준 스트림을 사용자 지정 위치로 변경할 수 있는 일반적인 명령으로 방향 지정, 방향 변경으로도 부른다. 즉, 표준 입력이나 표준 출력을 꼭 키보드나 화면으로 하는 것이 아니라 방향을 바꿔서(리다이렉션) 파일로 입력을 받거나 파일로 출력하도록 변경하는 것을 말한다.

  • 명령 > 파일: 표준 출력으로 출력하는 것을 화면이 아닌 다른 파일로 출력
  • 명령 >> 파일: 명령의 결과를 기존 파일 데이터에 추가
  • 명령 < 파일: 표준 입력으로 입력 받는 것을 키보드가 아닌 다른 파일로부터 입력

ex. ls의 출력 내용을 화면이 아닌 방향을 파일로 바꿔 sample.txt에 출력

 

파이프(pipe)

어떤 프로세스의 표준 출력을 다른 프로세스의 표준 입력으로 사용하게 하는 것이다.

  • |


ex. ls | grep 문자열
ls 명령의 출력 내용이 grep 명령의 입력 스트림으로 들어간다. grep은 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자 사용하는 명령어로, _pin_문자열이 포함된 단어만 검색해 화면으로 출력해준다.

'컴퓨터 과학(CS) > 리눅스' 카테고리의 다른 글

소프트 링크, 하드 링크  (0) 2022.01.18
도커를 위한 리눅스 쉘(bash) 이해  (0) 2022.01.17

댓글