프로필사진
DevOps 부트캠프 기록일지
DevOps_04_김재환
04_표준스트림과 stdin, stdout, stderr이 무엇인가요?
04_표준스트림과 stdin, stdout, stderr이 무엇인가요?

2023. 3. 10. 10:01부트캠프/DevOps 과제

표준 스트림이란?

  • 특정한 프로그래밍 언어 인터페이스뿐 아니라 유닉스 및 유닉스 계열 운영 체제(어느 정도까지는 윈도우에도 해당함)에서 컴퓨터 프로그램과 그 환경(일반적으로 단말기) 사이에 미리 연결된 입출력 통로를 가리킨다.
  • 보통 입출력은 물리적으로 연결된 시스템 콘솔의 키보드와 모니터를 통해 일어나는데, 표준 스트림은 이것을 추상화한 것이다. 어떤 명령이 대화형 셸을 통해 실행될 때, 일반적으로 명령의 스트림은 셸이 실행중인 텍스트 터미널에 연결된다. (그러나 이는 파이프와 같은 리다이렉션을 통해 전환될 수 있다.) 더 일반적으로 말하자면, 자식 프로세스는 부모 프로세스의 표준 스트림을 상속 받는다고 할 수 있다
  • 표준 스트림 중 하나는 입력을 위한 스트림(Standard input, STDIN, 0), 하나는 출력을 위한 스트림(Standard Output, STDOUT, 1), 하나는 오류 메시지를 출력하기 위한 스트림(Standard Error, STDERR, 2)이며, 실제로 리눅스의 /dev 디렉토리에서 위 세 개의 표준 스트림을 앞서 언급한 파일 형태로 담고 있습니다.

입력, 출력, 오류를 위한 표준 스트림
실제로 리눅스의 /dev 디렉토리에서 위 세 개의 표준 스트림을 앞서 언급한 파일 형태로 담고 있습니다.

stdin(표준 입력)

  • 프로그램으로 들어가는 데이터(보통은 문자열) 스트림이다. 프로그램은 read 명령을 이용하여 데이터 전송을 요청한다. 모든 프로그램이 입력을 요구하는 것은 아니다. 이를테면 dir이나 ls 프로그램(디렉터리에 들어 있는 파일 이름을 보여 주는 명령)은 실행시 옵션과 같은 명령줄 매개변수를 받을 수는 있으나, 동작 중에 데이터 스트림의 입력 없이 명령을 수행한다.
  • 별도의 리다이렉션 없이 프로그램을 시작한 경우, 표준 입력 스트림은 키보드에서 받아온다.
  • 표준 입력을 위한 파일 서술자는 0이다.

stdout(표준 출력)

  • 표준 출력은 프로그램이 출력 데이터를 기록하는 스트림이다. 프로그램은 write 명령을 이용하여 데이터 전송을 요청한다. 모든 프로그램이 출력을 요구하는 것은 아니다. 이를테면 파일 이름 바꾸기 명령(일반적으로 mv, move, ren)은 명령 수행이 성공적이어도 아무 메시지도 나타내지 않는다.
  • 리다이렉션 없이 표준 출력은 프로그램을 시작한 텍스트 터미널이 된다.
  • 표준 출력을 위한 파일 서술자는 1이다

stderr(표준 오류)

  • 표준 오류는 프로그램이 오류 메시지나 진단을 출력하기 위해 일반적으로 쓰이는 또다른 출력 스트림이다. 표준 출력과는 독립적인 스트림이며 별도로 리다이렉트될 수 있다.
  • 표준 출력을 위한 파일 서술자는 2이다

여기서 파일 서술자란?

  • 특정한 파일에 접근하기 위한 추상적인 키이다.
  • POSIX에서 파일 서술자는 정수, 곧 C형 int를 말한다. 모든 프로세스가 갖추어야 하는 표준 POSIX 파일 서술자는 다음과 같이 세 개가 있다.

 

출처

http://https://ko.wikipedia.org/wiki/%ED%91%9C%EC%A4%80_%EC%8A%A4%ED%8A%B8%EB%A6%BC