제 질문은 pty의 작동 방식보다는 pty의 개념과 디자인에 관한 것입니다. "Linux 프로그래밍 인터페이스" 책의 64장(의사 터미널)을 읽었는데 왜 우리가 하나 대신 의사 터미널 쌍(ptmx, pts)을 사용하는지 이해가 되지 않습니다. /dev/tty[1,6]을 보면 가상 터미널이 에뮬레이트되어 파일을 사용하고 있습니다. 의사 터미널로 동일한 작업을 수행하고 두 개가 아닌 하나의 파일을 사용하여 모의 시스템을 설계해 보는 것은 어떨까요?
답변1
나 역시 처음에는 이 질문에 대해 혼란스러웠지만 이제 이 질문에 대한 개념적(그리고 실제적) 답변을 이해했다고 믿습니다.
여기에는 의사소통에 관련된 두 당사자가 있습니다. 장치가 있는 경우 루프백처럼 동작하며 동일한 장치에 기록된 모든 내용을 에코합니다. 이렇게 하면 양측 모두 누가 데이터를 보냈는지 알기가 어려워집니다(모든 사람은 즉시 전송된 장치에 방금 기록된 데이터를 볼 수 있습니다).
개념적으로 이는 각 당사자가 다른 장치에 연결된 한 장치에서 쓰기/읽기를 함으로써 해결됩니다.
답변2
도착하다홍보하다TTY 하위 시스템(세션 관리 및 회선 규율)을 그대로 유지하면서 터미널 에뮬레이션을 사용자 영역으로 이동하기 위해 의사 터미널 또는 pty가 발명되었습니다.
Linus Akesson이라는 사람이 있었습니다.TTY 공개전체 이미지 페이지입니다. (아치 리눅스 위키 추가를 통해 찾았습니다: mosvy는 그것을 싫어하는 것 같습니다...).
며칠이 지난 지금도 위에 인용된 답변이 마음에 듭니다. Wikipedia에도 링크가 있습니다. 약간의 논의 후에(아쉽게도 댓글 참조) 다음 내용을 자유롭게 편집했습니다. 차이점은 "Edit..." 버튼에서 확인할 수 있습니다. "PTMX"와 "TTY Subsystem"은 새로운 단어입니다. 좋은 공식(?) 출처: drivers/tty/Kconfig
그리고 "터미널 에뮬레이션사용자 영역"이것이 xterm(등)이 하는 일입니다. XTerm은 X 및 창 관리자와 함께 'bash'가 Linux VT에서 실행되는 것처럼 느껴지도록 해야 합니다.
X가 사용자 공간에서 "모든 것"을 처리하는 직접적인 결과: 많은 xterm/bash를 시작한 후 각 xterm은 pts/0에 연결되고 각 bash는 pts/1, pts/2에 연결됩니다. 내부에서 시작할 수도 있습니다. .or 를 사용하는 하위 xterms/bash는 xterm &
xterm 내에서 새 쉘 계층을 시작합니다 bash
. 그럼에도 불구하고 사용자는 종속성을 빠르게 추적하지 못합니다.쉬운쉘이 있는 창을 생성하기 위해 PTY를 사용하고 있습니까?
"TTY 하위 시스템"의 VT(=VC)가 더 많이 사용됩니다.변화 없는, (첫 번째?) 제한은 64이고 시작 후에는 6만 설정됩니다. getty/agetty
("open tty port,...") 의 관점에서는 다르게 보일 수 있습니다 .
다음은 주요 5개의 특수 파일입니다 /dev
.
crw-rw-rw- 1 root tty 5, 0 tty
crw------- 1 root root 5, 1 console
crw-rw-rw- 1 root tty 5, 2 ptmx
맞아?이 용어는 모든 새로운 pty가 "p" 및 "s" 파일에 포함되어 있는 PTY의 BSD 버전에서 유래한 것으로 보입니다. UNIX98_PTY의 경우 다음과 같습니다.
/dev/ptmx:MX좋다이중(MASTER X 아님) 컨셉 콘솔용입니다. 그리고 클라이언트를 위해 /dev/pts/1-n
. ~의/dev/pts/0지금은 아무 말도 하고 싶지 않습니다. 바쁜 주인 한 명과 바쁜 노예들. 일대일 관계보다는 일대다 관계에 가깝습니다.
이 세 가지 주요=5 문자 장치 특수 파일은 실제로특수 특수 파일. 파일로는 많은 일을 하지 않습니다. 그러나 모든 장치 파일 뒤에는 일부 코드가 있으며 여기서는 drivers/tty/*.c
키보드 처리가 큰 문제가 아닙니다. VT 스위칭과 라인 규율이 동시에 있을 수도 있습니다.
/dev/pts/
다른 ptmx 파일과 모든 Major=136 슬레이브 장치 파일을 포함하는 디렉토리가 있습니다 . 일반적으로 /dev/ttyN
전문가=4입니다.
ioctl_console
(삭제된?) 댓글에서 파생됨: 이것은 다른 Q에서 논의 중인 요청 중 하나입니다."tty는 가상 터미널이 아닙니다", SK는 말한다ioctl VT_GETSTATE...tty는 vt가 아닙니다.(마지막에논평저기, 미안)
VT_GETSTATE
Get global vt state info. argp points to a
struct vt_stat {
unsigned short v_active; /* active vt */
unsigned short v_signal; /* signal to send */
unsigned short v_state; /* vt bit mask */
};
For each vt in use, the corresponding bit in the v_state mem‐
ber is set. (Kernels 1.0 through 1.1.92.)
config UNIX98_PTY
보낸 사람(drivers/tty의 Kconfig )
메인 사이트의 대표적인 프로그램은 Telnet 서버와 xterms입니다.
xterm이 아닌 /dev/pts/1-255를 얻는 것은 bash 프로세스입니다. xterm과 wm은 x와 bash 사이의 중개자입니다. 이는 이나 와 처음부터 xinit wm x
공동 노력한 결과 이다 xinit client -- server display
.