표준 스트림
컴퓨터 프로그램과 그 환경 사이에 미리 연결된 입출력 통로 / From Wikipedia, the free encyclopedia
표준 스트림(standard streams)은 특정한 프로그래밍 언어 인터페이스뿐 아니라 유닉스 및 유닉스 계열 운영 체제(어느 정도까지는 윈도우에도 해당함)에서 컴퓨터 프로그램과 그 환경(일반적으로 단말기) 사이에 미리 연결된 입출력 통로를 가리킨다.[1]
일반적으로 유닉스에서 동작하는 프로그램은 실행 시 세 개의 스트림이 자동으로 열린다. 이를 표준 스트림이라고 부른다. 하나는 입력을 위한 스트림(Standard input, STDIN, 0), 하나는 출력을 위한 스트림(Standard Output, STDOUT, 1), 하나는 오류 메시지를 출력하기 위한 스트림(Standard Error, STDERR, 2)이며, 이 세 개의 표준 스트림은 사용자의 터미널에 부착된다.
보통 입출력은 물리적으로 연결된 시스템 콘솔의 키보드와 모니터를 통해 일어나는데, 표준 스트림은 이것을 추상화한 것이다. 어떤 명령이 대화형 셸을 통해 실행될 때, 일반적으로 명령의 스트림은 셸이 실행중인 텍스트 터미널에 연결된다. (그러나 이는 파이프와 같은 리다이렉션을 통해 전환될 수 있다.) 더 일반적으로 말하자면, 자식 프로세스는 부모 프로세스의 표준 스트림을 상속 받는다고 할 수 있다.[2]
통상, 터미널에 로그인 셸이 먼저 기동되고, (사용자 인증이 끝나면) 대화형 셸이 기동된다. 이때 자동으로 터미널에 부착된 세 개의 표준 스트림이 상속된다. 이후, 셸에서 실행되는(exec) 모든 명령들은, 셸을 부모 프로세스로 삼아 세 개의 표준 스트림을 다시 상속 받는다.
표준 C 실행 라이브러리의 <stdio.h> 헤더에서 stdin, stdout, stderr 로 정의되며, <unistd.h>[깨진 링크(과거 내용 찾기)] 에 의해 파일 디스크립터 0, 1, 2 로 표현하기도 한다.[3][4][5]
유닉스의 영향을 강하게 받은 리눅스에서도 표준 스트림의 파일 서술자가 선점되어 있다.[6]