Linux/Unix에 "비표준" 스트림이 있습니까?

Linux/Unix에 "비표준" 스트림이 있습니까?

Linux에서 소위 "표준 스트림"은 stdin, stdout 및 stderr입니다. "표준"이라고 부르는 데에는 이유가 있습니다. 비표준 스트림이 있습니까? 이러한 비표준 스트림은 커널에서 근본적으로 다르게 처리됩니까?

답변1

이 맥락에서 "스트림"은 프로세스의 열린 파일입니다. (“스트림”이라는 단어는 여기서 주제에서 벗어난 다른 의미를 가질 수 있습니다.)

세 가지 표준 스트림은 프로그램이 시작될 때 이미 열려 있어야 하는 스트림입니다. 파일 설명자 0은 프로그램이 사용자 입력이나 기본 데이터 입력을 읽어야 하는 곳이기 때문에 표준 입력이라고 합니다. 파일 설명자 1은 프로그램이 일반 데이터 출력을 작성해야 하는 곳이기 때문에 표준 출력이라고 합니다. 파일 설명자 2는 프로그램이 오류 메시지를 기록하는 곳이기 때문에 표준 오류라고 합니다.

다른 파일 설명자 번호는 사전 할당된 역할이 없기 때문에 표준이 아닙니다. 그들은 결국 프로그램이 원하는 대로 사용되게 될 것입니다. 따라서 프로그램에서 연 모든 파일을 "비표준 스트림"이라고 부를 수 있지만 이상하고 혼란스러울 수 있습니다. "stdin, stdout 또는 stderr 이외의 열린 파일"에는 실제로 이름이 필요하지 않으며 "비표준 스트림"은 이름이 필요한 것처럼 들립니다. 특별한 유형의 파일 또는 비표준 방법으로 열린 파일. 이는 사실이 아닙니다.

파일 설명자 0-2의 일반적인 역할은 표준 라이브러리와 특정 프로그램에 의해 부여됩니다. 예를 들어, 콘솔 로그인 프로그램과 터미널 에뮬레이터는 이러한 파일 설명자에서 터미널이 열려 있는 상태에서 셸(또는 다른 프로그램)을 시작합니다. C 표준 라이브러리는 FILE*이러한 세 가지 표준 설명자에 대한 객체(C가 스트림이라고 부르는 것)를 생성합니다. 커널에는 특별한 처리가 없습니다.

답변2

커널은 모든 파일 설명자를 동일한 방식으로 처리합니다. 파일 설명자 0을 입력(stdin)으로 사용하고, 파일 설명자 1을 출력(stdout)으로 사용하고, 파일 설명자 2(stderr)에 오류를 인쇄하는 프로세스를 갖는 것은 단지 관례일 뿐입니다.

터미널이 시작되면 의사 tty가 생성되고 파일 설명자 0, 1, 2에 입력/출력이 할당된 셸이 시작됩니다. 그런 다음 프로그램에서 이 규칙을 사용하지 않으면 입력 및 출력을 적절하게 리디렉션해야 합니다. /또는 출력.

관련 정보