stdin
POSIX는 0, stdout
1, 2를 지정합니까 stderr
, 아니면 단지 관례입니까? 다른 시스템이 이 규칙에서 벗어나나요, 아니면 이것이 안전한 가정인가요?
답변1
POSIX 사양에 표준화된 것처럼 보이지만,
POSIX.1-2017프록시를 통해unistd.h
헤더는 파일 스트림에 대해 다음 기호 상수를 정의해야 합니다.
STDERR_FILENO
stderr의 파일 번호 2.STDIN_FILENO
표준 입력의 파일 번호는 0입니다.STDOUT_FILENO
1. 표준 출력의 파일 번호입니다.
하지만 또한
stderr
" ,stdin
,stdout
- 표준 I/O 스트림" 에 대한 POSIX 문서상태,이 볼륨 POSIX.1-2017은 ISO C 표준을 따릅니다.
이것ISO ISO/IEC 9899:201x 표준그냥 설명하자면,
미리 정의된 세 가지 스트림 stdin, stdout 및 stderr은 프로그램 시작 시 방향이 지정되지 않습니다.
ISO C는 이에 대해 상대적으로 침묵하는 것으로 보이며 커널이 STDOUT
, 및 이라는 STDERR
설명자 에 원하는 것을 할당할 수 있도록 허용합니다 STDIN
. 그러나 POSIX 문서에는 unistd.h
해당 수준에서 해결해야 할 문제가 무엇인지 명확하게 나와 있습니다.
기타 운영 체제
답변2
쉘 명령 언어에 대한 POSIX 사양, 섹션 2.7, 리디렉션,설명하다
리디렉션에 사용되는 일반적인 형식은 다음과 같습니다:
[N] 리디렉션 작업 단어숫자N파일 설명자 번호를 지정하는 선택적 10진수입니다.
0
, 1, 2 값은 특별한 의미와 일반적인 용도를 가지며 호출되는 특정 리디렉션 작업에 의해 암시됩니다.표준 입력,표준 출력, 그리고표준 에러, 각각. …︙
리디렉션된 입력의 일반적인 형식은 다음
과 같습니다.N ]<단어그 중 선택 사항N파일 설명자 기호를 나타냅니다. 이 숫자가 생략되면 리디렉션은 표준 입력(파일 설명자 0)을 참조해야 합니다.
... 표준 출력을 언급하는 >
동등한 문단도 있습니다 .1>