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()있고 이 이름을 의사 터미널을 통해 제어하려는 모든 프로세스에 전달할 수 있습니다.

관련 정보