BSD 스타일 의사 터미널 및 UNIX 98 의사 터미널

BSD 스타일 의사 터미널 및 UNIX 98 의사 터미널

Linux의 의사 터미널에 대해 읽은 내용에 따르면 두 가지 유형의 의사 터미널이 있습니다.BSD 스타일 의사 터미널(더 이상 사용되지 않음) 및UNIX 98 의사 터미널.

나는 이 두 가지 유형의 의사 터미널에 대한 이해를 보여주기 위해 두 개의 이미지를 만들었습니다.

다음 이미지는 BSD 스타일 의사 터미널의 작동 방식을 보여줍니다(이미지가 잘못된 경우 정정해 주세요).

여기에 이미지 설명을 입력하세요.

이러한 유형의 의사 터미널은 이해하기 어렵지 않습니다. 각 터미널은 고유한 기본 드라이버에 연결됩니다.


그러나 UNIX 98 의사 터미널에서는 상황이 약간 혼란스럽습니다. 아래 이미지는 이러한 유형의 의사 터미널이 어떻게 작동하는지 보여줍니다.

여기에 이미지 설명을 입력하세요.

따라서 기본적으로 모든 터미널은 동일한 메인 드라이버( /dev/ptmx)를 사용하지만 메인 드라이버가 어떻게 수행하는지 잘 모르겠습니다.

  • 데이터가 터미널 프로세스 중 하나에서 전송되는 경우 마스터 드라이버는 데이터를 전달해야 하는 TTY 슬레이브 드라이버를 어떻게 알 수 있습니까?

  • TTY 슬레이브 드라이버 중 하나에서 데이터가 전송되는 경우 마스터 드라이버는 데이터를 전달해야 하는 터미널 프로세스를 어떻게 알 수 있습니까?

마스터 드라이버는 이미지에 표시된 방식으로 이 작업을 수행하는 방법을 알고 있습니까(즉, 마스터 드라이버에는 각 터미널 PID를 해당 TTY 슬레이브 드라이버에 매핑하는 매핑 테이블이 있음)?

답변1

당신은 이름에 집착합니다. /dev/ptmx"드라이버"가 아니라 특별한 의미를 지닌 파일 시스템의 이름일 뿐입니다.

프로세스는 posix_openpt()를 호출하여 새로운 마스터 pty를 엽니다. open()이는 를 호출하여 동일한 효과를 얻을 수 있습니다 /dev/ptmx. 프로세스가 open()호출 할 때 /dev/ptmx마다새로운의사 터미널을 생성합니다. 이 파일 설명자가 더 이상 열려 있지 않으면 의사 터미널이 삭제됩니다. 이 파일 설명자는 의사 터미널의 기본 측면을 참조하며 다른 파일 설명자와 마찬가지로 하위 프로세스로 전달될 수 있습니다.

자세한 내용은 다음을 참조하세요.unix.stackexchange.com/questions/117981. (제안을 위해 @JdeBP에게 팁을 주세요.)

프로세스에 의사 터미널 마스터를 가리키는 파일 설명자가 있으면 호출을 통해 의사 터미널 슬레이브의 이름을 찾을 수 ptsname()있고 이 이름을 의사 터미널을 통해 제어하려는 모든 프로세스에 전달할 수 있습니다.

관련 정보