前言
TTY:teletype,早期的电传打字机,后面演变成了键盘和显示器,都是计算机的终端设备。为了与终端设备交互,linux又实现了TTY的子系统。
通过toe -a
可以查看系统支持的终端类型。
控制台和虚拟终端
通过ls /dev
和ls /dev/pts
我们可以看到系统当前的设备,其中就包含了控制台和虚拟终端。他们都是用于和系统进行交互的终端。他们通过软件的方式实现了曾经的硬件终端(电传打字机)。
- /dev/console:控制台
我们使用VMware打开linux系统的控制台,会发现启动停止会打印许多的系统信息,这就是控制台,一种特殊的终端。 - /dev/tty[0-63]:虚拟终端(内核态)
控制台中,我们执行tty
发现会打印/dev/tty*,这个就是内核态的虚拟终端。 - /dev/pts/[0+]:虚拟终端(用户态)
我们通过putty或xshell等工具通过ssh登陆后所出现的交互界面就是用户态的虚拟终端。
C程序获取TTY
#include <stdio.h>
#include <unistd.h>
#define MY_STDIN 0
#define MY_STDOUT 1
#define MY_STDERR 2
int main(int argc,char * argv[])
{
if(isatty(MY_STDOUT)) /*如果FD 1是一个tty*/
{
puts(ttyname(MY_STDOUT)); /* 打印tty绝对路径 */
}
else
{
puts("run error!");
return -1;
}
return 0;
}
异常
- 非交互终端(如反弹shell)执行top,出现failed tty get,表示没有获取相关设备
修复:top -b
已批处理模式运行,不接受输入指令。
爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!