왜 stderr이 필요합니까?

왜 stderr이 필요합니까?
  $ tty
  /dev/tty0

존재하다

      $cat 

사용자 공간에서 cat 프로세스는 표준 입력이 /dev/tty0 파일로부터 입력을 받기를 기다립니다.

존재하지 않는 파일 fff를 나열할 때,

  ls /fff > file1
   ls cannot find file :file1 Access denied

stdout이 /dev/tty0 대신 file1로 리디렉션되지만 존재하지 않는 파일에 대한 오류는 stderr 파일 설명자를 통해 /dev/tty0에 표시됩니다.


질문:

stderr이 /dev/tty0에 stdout을 쓰는 것과 유사하다면 stderr의 목적은 무엇입니까?

/dev/tty0에 오류를 기록하기 위해 파일 설명자 stderr을 유지 관리하는 UNIX/Linux의 아이디어는 무엇입니까?

답변1

오류 스트림에서 출력 스트림(STDOUT, 파일 설명자 1)을 분리하려면 STDERR(파일 설명자 2)이 필요합니다.

분리하지 않으면 유효한 출력과 오류를 구분할 수 없습니다.

사례에서 볼 수 있듯이 두 스트림 모두 터미널에 연결되어 있으며 dup(2)사용자 공간에서 간단한 파일 설명자 조작을 통해 쉽게 구별하거나 조작할 수 있습니다.

예를 들어 STDOUT을 한 파일로 보내고 STDERR을 다른 파일로 보내는 경우:

my_command >stdout.log 2>stderr.log

답변2

stdoout각 UNIX 프로세스는 쓰기 전용, stdin읽기 전용(제가 생각하는 대로) 및 비차단 읽기/쓰기 배포에서 시작 시 stderr최대 한 개의 라인 출력 버퍼가 열려 있을 것으로 예상됩니다.

stderr주로 소비자에게 즉시 출력을 제공하는 데 사용되며 최종 사용자 인터페이스 애플리케이션에 크게 의존합니다.

관련 정보