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