리디렉션은 어떻게 구현되나요?

리디렉션은 어떻게 구현되나요?

리디렉션은 운영 체제 커널이 아닌 셸의 개념입니까?

시스템 호출 리디렉션은 어떻게 구현됩니까?

리디렉션 구현이 파이프와 유사합니까?

답변1

리디렉션의 경우 stdin(< 입력을 통한 입력) 및 stdout(> 출력을 통한 출력)을 대체하기 위해 dup2()를 사용하는 쉘에서 이(리디렉션)가 달성된다고 가정합니다.

  1. 입력 및 출력을 위해 파일 열기 in = open() out = open()
  2. dup2(in, 0) // 입력 파일을 표준 입력으로 교체
  3. dup2(out, 1) // 출력 파일을 stdout으로 교체합니다.
  4. 근사)
  5. 닫다(아웃)
  6. 구현하다()

파이프의 경우, Pipe(2) 시스템 호출은 비슷한 방식으로 사용됩니다. 즉, 읽기 끝과 쓰기 끝이 있습니다. 파이프를 통해 연결된 각 명령은 파이프의 한쪽 끝에서 읽고 다른 쪽 끝으로 씁니다. stdin, stdout은 명령의 해당 파이프 끝을 대체합니다.

답변2

"리디렉션"은 쉘 개념으로, 세부 사항은 말하는 쉘에 따라 다릅니다.

그러나 리디렉션의 기본은 시작 시 미리 열리는 입력 및 출력 파일 설명자 개념에 있으며, 이는 함수 작동 방식으로 돌아갑니다 execve. 즉, 하위 프로세스는 열린 파일 설명자를 상속합니다.

따라서 자식 프로세스(명령)를 시작하려면 부모 프로세스(즉, 셸)는 먼저 자식 프로세스에 대한 자식 프로세스를 만든 다음 자식에 대한 적절한 파이프 끝(파일 설명자 0, 1 및 2)을 설정합니다. 프로세스' 입력 및 출력을 선택한 다음 하위 프로세스가 실행을 통과할 때 이를 상속하도록 합니다 execve.

예, 파이프라인입니다.

관련 정보