표준 입력에 쓰지 않는 이유는 무엇입니까?

표준 입력에 쓰지 않는 이유는 무엇입니까?

~에 따르면이 답변, stdin, stdout및 는 stderr모두 처음에 동일한 위치( 와 동일)에 연결되어 있으며 합계를 읽고 쓰는 규칙은 /dev/tty바로 다음과 같습니다.stdinstdoutstderr

그렇다면 왜 하나로 병합하지 않고 stdin분리합니까 ?stdout

답변1

FILE 포인터(예: stdin, stdout 및 stderr)에는 기본 파일 설명자가 하나만 포함될 수 있습니다. 따라서 다음과 같은 파이프라인 설정이 있는 경우:

ls | grep foo | less

그러면 grep의 stdin, stdout 및 stderr은 두 개의 연결된 파이프라인()이 있기 때문에 모두 서로 다른 fileno()를 갖습니다. 따라서 다른 파일도 있어야 합니다.

답변2

입력 스트림을 출력 스트림에서 분리하면 프로그램이 입력을 읽고 동시에 출력을 쓰는 것이 더 쉬워집니다.

이는 프로그램이 리디렉션이나 파이프를 사용하여 입력 소스가 아닌 다른 곳에 출력을 기록하도록 허용하는 것을 더 쉽게 만듭니다.

게다가, 있을 뿐만 아니라그냥 합의, 세 가지 표준 I/O 스트림도기준. 예를 들어 참조하십시오.표준 I/O 스트림 섹션POSIX 표준의 시스템 인터페이스 부분입니다.

이 섹션의 이론적 근거설명하다:

ISO C 표준은 프로그램 시작 시 stdin을 읽을 수 있고 stdout 및 stderr을 쓸 수 있음을 보장하지만 이 보장은 프로그램이 실행되는 상황에 따라 달라집니다(ISO C 및 POSIX 표준에서 제공하는 모든 보장도 마찬가지). 요구사항을 충족하는 환경에서 실행하세요. 읽기용으로 열려 있지 않은 파일 디스크립터 0이나 쓰기용으로 열려 있지 않은 파일 디스크립터 1, 2를 사용하여 실행되는 프로그램은 요구 사항을 충족하지 않는 환경에서 실행됩니다. 응용 프로그램 작성자는 파일 설명자 0이 읽기용으로 열리지 않거나 파일 설명자 1 또는 2가 쓰기용으로 열리지 않음과 일치하는 표준 유틸리티나 응용 프로그램을 실행하지 않도록 경고를 받습니다.

관련 정보