PTY Structure


### 사용자 프로그램에서 터미널을 emulation 하는것
PTY 는 master/slave pair 로 이루어지는데 /dev/ptmx 파일을 open 하면 pseudo terminal master (PTM) 에 해당하는 file descriptor 가 생성되고 pseudo terminal slave (PTS) 에 해당하는 device 가 /dev/pts/ 디렉토리에 생성됩니다. 일단 두 ptm 과 pts 가 open 되면 /dev/pts/[번호] 는 실제 터미널과 같은 인터페이스를 프로세스에 제공합니다. ptm 에 write 한 데이터는 pts 의 input 으로, pts 에 write 한 데이터는 ptm 의 input 으로 사용됩니다. kernel 이 처리하는 레이어가 중간에 들어간 named pipe 와 비슷하다고 할 수 있습니다

![](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fc1c8f997-6b7c-42ca-aef4-e0d9bf1ee4cf%2FUntitled.png?table=block&id=9d53c5c3-0b22-4ac0-ac10-cac5c5e4f35c&cache=v2)
- xterm, gnome-terminal, telnet, ssh...
virtual console 에서는 커널에서 터미널을 emulation 했다면, TTY driver 가 제공하는 session management 기능과 line discipline 을 그대로 사용하면서 사용자 프로그램에서 터미널을 emulation 하는것

PTY 는 master/slave pair 로 이루어지는데 /dev/ptmx 파일을 open 하면 pseudo terminal master (PTM) 에 해당하는 file descriptor 가 생성되고 pseudo terminal slave (PTS) 에 해당하는 device 가 /dev/pts/ 디렉토리에 생성됩니다. 일단 두 ptm 과 pts 가 open 되면 /dev/pts/[번호] 는 실제 터미널과 같은 인터페이스를 프로세스에 제공합니다. ptm 에 write 한 데이터는 pts 의 input 으로, pts 에 write 한 데이터는 ptm 의 input 으로 사용됩니다. kernel 이 처리하는 레이어가 중간에 들어간 named pipe 와 비슷
xterm 에서 ls 명령을 입력하면 `ptm -> line discipline -> pts `를 거쳐서 bash shell (user process) 에 전달되고 명령의 실행 결과가 `pts -> line discipline -> ptm` 을 통해서 xterm 에 전달되면 xterm 은 실제 터미널과 같이 화면에 표시

![](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F0ab59adc-65fc-45a2-a789-f280639a4046%2FUntitled.png?table=block&id=af99279d-c897-4cc2-9d97-97ce34fda5cd&cache=v2)





> [Introduction](https://mug896.github.io/bash-shell/tty.html)






