一个TTY对应两个文件描述符,一个是master_fd,一个是slave_fd,它们的读写是互相交叉连接的。
master_fd只有创建TTY的进程拥有,往这个文件里写东西相当于给程序打字(进入stdin),除了控制字符外都可以在slave_fd端读到。
slave_fd是公开的,对应类似/dev/pts/167这样的文件。往这个文件里写相当于在屏幕上打字(和stdout一个出路)
在任意终端输 tty 即可看到这个文件的slave端具体是谁。
TTY与其他文件不同的是:
具有内核管理的一些特殊行为。比如外部向TTY写时,遇到0x03这样的字符会导致内核向前台进程组发送SIGINT中断。这个行为可以被修改。
每个TTY会对应唯一的一个进程组,称之为“前台进程组”。这个数据由内核维护。