`
vaqeteart
  • 浏览: 304092 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

tty

 
阅读更多
tty [选项]...

[功能]
打印连接到标准输入的终端的文件名。

[描述]
命令选项:
-s, --silent, --quiet: 什么也不打印,只是返回退出状态码。
--help: 打印帮助信息。
--version: 打印版本信息并退出。

返回的状态码:
0 表示标准输入是一个终端。
1 表示标准输入不是一个终端。
2 表示给定的参数是不正确的参数。
3 表示发生了写错误。

[举例]
*查看当前的标准终端文件描述符号:
[quietheart@lv-k etc]$ tty
/dev/pts/6
这里,输入tty之后,输出"/dev/pts/6"就是当前连接的终端对应的文件描述符号,我们可以通过向这个文件,这样会看到当前终端会输出我们写入的数据,例如:
[quietheart@lv-k etc]$ echo "mytest" >/dev/pts/6
mytest
可见,向/dev/pts/6文件写入的内容,直接显示到我们的终端上面了。如果我在机器上面开了多个终端,然后我在别的终端中输入上面的echo命令,那么将会看到对应"/dev/pts/6"的终端上面会显示相应的字符了。

*运行tty什么也不输出,然后查看其退出码:
[quietheart@lv-k etc]$ tty -s
[quietheart@lv-k etc]$ echo $?
0
这里,使用shell的命令"echo $?"来显示上一条命令的退出状态码。状态码的含义如下:
0 表示标准输入是一个终端。
1 表示标准输入不是一个终端。
2 表示给定的参数是不正确的参数。
3 表示发生了写错误。

[其它]
*基本概念:
1,tty(终端设备的统称):
tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。
2,pty(虚拟终端):
如果我们远程telnet到主机或使用xterm时,也需要一个终端交互,这就是虚拟终端pty(pseudo-tty)
3,pts/ptmx(pts/ptmx结合使用,进而实现pty):
pts(pseudo-terminal slave)是pty的实现方法,与ptmx(pseudo-terminal master)配合使用实现pty。

*Linux终端:
在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下几种:
1,串行端口终端(/dev/ttySn)
串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0), /dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0), (4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如,在命令行提示符下键入:echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。可接串口来实验。
2,伪终端(/dev/pty/)
伪终端(Pseudo Terminal)是成对的逻辑终端设备(即master和slave设备, 对master的操作会反映到slave上)。
例如/dev/ptyp3和/dev/ttyp3(或者在设备文件系统中分别是/dev/pty/m3和 /dev/pty/s3)。它们与实际物理设备并不直接相关。如果一个程序把ptyp3(master设备)看作是一个串行端口设备,则它对该端口的读/ 写操作会反映在该逻辑终端设备对应的另一个ttyp3(slave设备)上面。而ttyp3则是另一个程序用于读写操作的逻辑设备。
这样,两个程序就可以通过这种逻辑设备进行互相交流,而其中一个使用ttyp3的程序则认为自己正在与一个串行端口进行通信。这很象是逻辑设备对之间的管道操作。对于ttyp3(s3),任何设计成使用一个串行端口设备的程序都可以使用该逻辑设备。但对于使用ptyp3的程序,则需要专门设计来使用 ptyp3(m3)逻辑设备。
例如,如果某人在网上使用telnet程序连接到你的计算机上,则telnet程序就可能会开始连接到设备 ptyp2(m2)上(一个伪终端端口上)。此时一个getty程序就应该运行在对应的ttyp2(s2)端口上。当telnet从远端获取了一个字符时,该字符就会通过m2、s2传递给 getty程序,而getty程序就会通过s2、m2和telnet程序往网络上返回”login:”字符串信息。这样,登录程序与telnet程序就通过“伪终端”进行通信。通过使用适当的软件,就可以把两个甚至多个伪终端设备连接到同一个物理串行端口上。
在使用设备文件系统 (device filesystem)之前,为了得到大量的伪终端设备特殊文件,使用了比较复杂的文件名命名方式。因为只存在16个ttyp(ttyp0—ttypf) 的设备文件,为了得到更多的逻辑设备对,就使用了象q、r、s等字符来代替p。例如,ttys8和ptys8就是一个伪终端设备对。不过这种命名方式目前仍然在RedHat等Linux系统中使用着。
但Linux系统上的Unix98并不使用上述方法,而使用了”pty master”方式,例如/dev/ptm3。它的对应端则会被自动地创建成/dev/pts/3。这样就可以在需要时提供一个pty伪终端。目录 /dev/pts是一个类型为devpts的文件系统,并且可以在被加载文件系统列表中看到。虽然“文件”/dev/pts/3看上去是设备文件系统中的一项,但其实它完全是一种不同的文件系统。
即: TELNET ---> TTYP3(S3: slave) ---> PTYP3(M3: master) ---> GETTY

*实践
以下过程是在ubuntu上面的实践结果。
1,虚拟终端/dev/tty*和伪终端/dev/pts/*:
假设有5个xterm终端的话,会发现/dev下面有一个/dev/ptmx /和5个/dev/pts/*
而如果用"[Ctrl][Alt]F1"进入一个终端的话,就会发现/dev下面多出一个/dev/tty1

2,查看终端的方法:
使用命令"tty"可以查看当前对应的终端,命令"ps -ax"可以查看所有程序以及对应的终端。通过这个命令,发现如果多开一个screen程序,或者用telnet登陆之后,那么机器上面就会多一个/dev/pts/*。可知,一般伪终端用户模拟终端程序。

3,向指定终端发送信息:
如果运行"echo hello >/dev/tty2",
那么"[Ctrl][Alt]F2"打开"/dev/tty2"对应的终端,就会发现刚才发送的hello了。
注意,如果发送"echo -n ls >/dev/tty2"那么会显示ls,但是回车之后,并没有执行ls。可见:ttyN是代表linux的纯命令行终端,而写到这个终端的字符串只是做为这个终端的输出,并没有当做终端的输入处理。

如果运行"echo hello >/dev/pts/2",
那么,就可以在xterm的第二个窗口看到hello了。可知,/dev/pts/n是Xwindows模式下的伪终端.

参考资料:
http://blog.csdn.net/freeman1975/archive/2009/10/19/4696781.aspx
"info tty"
"man tty"
分享到:
评论

相关推荐

    tty.rar_linux tty_tty

    "tty.rar_linux tty_tty"这个压缩包文件可能包含了一些关于Linux TTY工作台驱动的详细资料,对于理解Linux内核中的串行通信以及终端管理非常有价值。 TTY系统在Linux中由多个部分组成,包括硬件设备、驱动程序、...

    计算机控制工程,TTY接受程序

    在这样的系统中,TTY(Teletype)接受程序是一个关键组件,尤其在早期的计算机通信中,TTY设备是人机交互的主要方式之一。 TTY(Teletype)是一种古老的电传打字机,它能够通过串行通信接口与计算机进行数据交换。...

    linux tty驱动源码分析

    Linux系统中的TTY驱动是操作系统中非常重要的一部分,TTY驱动主要负责处理用户与Linux内核之间的串行通信。在Linux系统中,TTY是终端(terminal)的一个泛称,其中包括了物理串口、虚拟控制台、伪终端(pseudo-...

    tiny_tty_kernel_2.6.32

    《Linux设备驱动开发详解——基于2.6.32内核的tiny_tty模块解析》 在Linux系统中,TTY(Teletype)是字符型终端设备的抽象,它为用户提供了与操作系统交互的文本界面。Linux Device Driver Development (LDD3) 是一...

    linux虚拟tty驱动(kernel4.9版本以上)

    Linux虚拟TTY驱动是操作系统内核中的一个重要组成部分,它允许用户空间与硬件串行端口进行交互。在Linux kernel 4.9及更高版本中,TTY(Teletype)驱动系统得到了进一步的优化和完善,能够支持创建多个虚拟串口设备...

    Linux的TTY介绍

    ### Linux的TTY概念详解 #### TTY的基本定义与历史背景 TTY是TeleTYpe的缩写,最初指的是一种能够通过串行线路进行信息发送和接收的设备——电传打字机(Teletypes),其功能类似于早期的电报机。随着计算机技术的...

    linux_tty_pty_pts_概念_区别

    ### Linux 下的TTY、PTY与PTS详解 #### 一、TTY (Terminal) 在 Linux 和其他类 Unix 操作系统中,**TTY** 是一种特殊的字符设备,最初用来指代早期计算机中使用的电传打字机(Teletype machines)。随着技术的发展...

    WIN TTY 源代码

    【标题】"WIN TTY 源代码"指的是一个针对Windows平台实现的TTY(TeleTYpeWriter)源代码项目,通常用于串口通信。TTY在早期的计算机系统中扮演着重要角色,允许用户通过终端设备与主机进行交互。在Windows环境中,...

    Linux终端tty设备驱动编程.

    Linux终端tty设备驱动编程涉及Linux操作系统中终端设备的驱动开发,这些设备包括控制台、串行端口终端和伪终端。终端设备在Linux中是字符型设备,主要承担用户与系统交互的作用。Linux系统中终端设备的种类较多,...

    对于Linux内核tty设备的一点理解

    Linux操作系统中的TTY(Teletype的简称)设备是一种用于文本用户界面的通信接口,它最早源自于电传打字机(Teletypes或Teletypewriters),最初由Teletype公司生产。TTY设备是Unix系统中的一种重要字符型设备,它...

    linux 下利用tty 发送PTZ CMD的测试程式

    在Linux操作系统中,TTY(Teletype)是与终端设备交互的一种接口,广泛用于串行通信。本测试程式主要是为了实现通过TTY接口发送PTZ(Pan-Tilt-Zoom,即云台控制)命令,这对于远程监控系统或者视频会议等应用来说至...

    Linux 设备模型之终端设备(tty)驱动架构分析

    ### Linux 设备模型之终端设备(tty)驱动架构分析 #### 一、前言 在 Linux 系统中,终端设备是一种重要的字符型设备,它主要用于用户与系统的交互。随着技术的发展,终端设备的种类逐渐增多,为了方便管理和操作...

    TTY驱动及串口驱动分析.doc

    TTY驱动的核心在于其分层结构,这使得它能够高效地处理输入输出数据,并与其他系统组件协同工作。下面将详细阐述TTY驱动的主要组成部分及其功能。 1. TTY核心层: TTY核心层是整个驱动的基础,它负责管理和调度各个...

    Linux中tty框架与uart框架

    ### Linux中tty框架与uart框架的关键知识点 #### 1. tty框架概述 在Linux系统中,**tty**(TeleTYpe)是指各种终端设备。这些终端通常与硬件相对应,如键盘、鼠标、显示器和串行通信接口(串口)。在Linux中,tty...

    前端开源库-tty-table

    **前端开源库-tty-table** 在现代的软件开发中,前端开发者经常需要处理各种数据的展示,尤其是在命令行界面(CLI)应用中。TTY(TeleTYpe Writer)是早期计算机时代的设备,现在常用于指代命令行接口。`tty-table`...

    前端开源库-tty-size

    "tty-size"是一个专为前端开发设计的开源库,它专注于获取TTY(终端模拟器)的宽度和高度。了解这个库对于优化命令行界面应用或构建适应不同终端尺寸的Web应用至关重要。 TTY(Teletype)是早期的电传打印机设备,...

    tty_driver 结构的细节

    ### tty_driver 结构的细节 `tty_driver`结构在Linux内核中扮演着重要的角色,它主要用于注册一个tty驱动到tty核心中。本篇将详细解释`tty_driver`结构中的各个成员及其作用,并探讨这些成员如何与tty核心交互。 #...

Global site tag (gtag.js) - Google Analytics