有趣的问题
Linux 中的 终端,控制台,TTY,PTY 究竟是什么?它们与进程有什么关系?
历史回顾:控制台 (Console)
控制台是一个直接控制设备的面板 (属于设备的一部分)
计算机设备的控制台:按键 & 指示灯 (键盘 & 显示器)
早期的电子计算机必然有一个控制台
历史回顾:终端 (Terminal)
终端是一台独立于计算机的机器,是能够和计算机进行交互的设备
TTY -- 即:TeleType Writer 电传打字机,一种终端设备
历史发展进程
电传打字机已经淘汰
计算机上的输入设备和显示设备从主机独立出来
控制台与终端的物理表现形式逐渐趋近
计算机开始支持多任务处理
终端与进程
TTY 演变为 Linux 中的抽象概念,对于进程而言 TTY 是一种输入输出设备
各种终端类型
内核终端模拟器
伪终端模型
伪终端 (gnome-terminal)
伪终端程序设计 (master)
创建 PTY 主从设备:master = posix_openpt(O_RDWR);
创建主设备权限:
- grantpt(master); // 获取设备使用权限
- unlockpt(master); // 解锁设备,为读写做准备
读写主设备
- c = read(master, &rx, 1);
- len = write(master, txbuf, strlen(txbuf));
伪终端程序设计 (slave)
打开 PTY 从设备:slave = open(path_to_slave, O_RDWR);
读写从设备:
- write(slave, "Delphi\r", 7);
- read(slave, buf, sizeof(buf) - 1);
思考
终端必然与进程关联才有意义!那么进程之间除了父子关系,是否还有其他关系?