다디와 괴발개발

표준 스트림과 stdin, stdout, stderr 본문

DevOps/Linux

표준 스트림과 stdin, stdout, stderr

아임다디 2022. 3. 18. 23:56

C언어를 사용하다 보면 헤더에 #include <stdio.h>를 많이 볼 수 있다.

stdio는 Standard Input & Output의 줄임말로 표준 입출력을 의미한다.

리눅스 쉘에서도 쉘의 기능들을 최대한으로 끌어내기 위해 표준 입출력에 대한 이해가 필수적이다.

먼저, 표준 스트림에 대해 살펴보자

표준 스트림

표준 스트림이란? Standard Stream에서 Stream은 프로그램을 드나드는 데이터의 흐름을 말한다.

프로그램은 보통 입력을 받으면 어떤 형태로 출력을 내놓는다. 이렇게 컴퓨터 프로그램과 입출력 장치 사이에 미리 연결된 입출력 통로를 표준 스트림이라고 생각하면 된다.

표준 스트림은 stdin, stdout, stderr, 세 가지가 있다.

출처 : 위키백과

STDIN (Standard Input, 0)

stdin은 입력을 위한 스트림으로, 프로그램으로 들어가는 입력값의 데이터를 의미한다

예를 들어, sudo 모드를 사용하기 위해서는 비밀번호를 입력해줘야 하는데, 비밀번호를 입력할 때 표준 입력 스트림을 사용하게 된다

STDOUT (Standard Output, 1)

stdout은 출력을 위한 스트림으로, 프로그램이 출력 데이터를 기록하는 스트림이다.

명령을 입력하면 나타나는 결과들 모두 stdout에 해당하며, 주로 텍스트 터미널에서 이루어진다.

하지만, 모든 입력에 대해서 프로그램이 출력을 내지는 않는다. 예를 들어 파일 이름 바꾸기 명령에 해당하는 mv와 같은 명령어는 성공적이어도 아무 메시지도 나타나지 않는다.

STDERR (Standard Error, 2)

stderr는 오류 메시지를 위한 스트림이다.

오류 메세지나 진단을 출력하기 위해 쓰이는 출력 스트림이다.

또 다른 출력 스트림의 형태이지만, 표준 출력과는 독립적인 스트림이며 별도로 리다이렉트 될 수 있다.

텍스트 터미널인 쉘 환경에서 사용자가 키보드를 통해 stdin에 해당하는 입력을 하면, 프로세스는 반드시 stdout이나 stderr를 모니터에 출력해줘야 한다.