终端tty、虚拟控制台及FrameBuffer的切换过程

一、区分/dev/tty、/dev/console、/dev/pts、/dev/ttyn /dev/ttySn

通常我们在linux下看到的控制台(console)是由几个设备完成的。分别是/dev/ttyN.通常使用热键 alt+Fn来在这些虚拟终端之间进行切换。所有的这些tty设备都是由linux/drivers/char/console.c和vt.c对应。

控制终端 /dev/tty指的是当前所处的终端,输出到此的内容只会显示在当前工作的终端显示器上,如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令”ps –ax”来查看进程与哪个控制终端相连。对于你登录的shell,/dev/tty就是你使用的终端,设备号是(5,0)。使用命令”tty”可以查看它具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。这个终端文件可以由各个用户共享控制台终端 /dev/ttyn  n(0到6)  tty1,tty2就是不同的虚拟终端(virtual console)./dev/console 就是tty0 ,tty0则是当前所使用虚拟终端即激活的虚拟终端的一个别名,系统所产生的信息会发送到该终端上,实际上机器只有一个屏幕,也就是我们看到的这个屏幕,可以理解为console指向激活的那个tty,准确地说是激活的那个tty才将输出显示到console。历史上,console指主机本身的屏幕键盘,而tty指用电缆链接的其它位置的控制台(仅包含屏幕和键盘)。tty0是系统自动打开的,但不用于用户登录

伪终端 /dev/pts是远程登陆(telnet,ssh等)后创建的控制台设备文件所在的目录。由于可能有好几千个用户登陆,所以/dev/pts其实是动态生成的,不象其他设备文件是构建系统时就已经产生的硬盘节点(如果未使用devfs) 。第一个用户登陆,console的设备文件为/dev/pts/0,第二个为/dev/pts/1,以此类推。这里的0、1、2、3不是具体的标准输入或输出,而是整个控制台。你可尝试 echo

"aaaaaa" > /dev/pts0、1、2……。

串行端口终端(/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)端口的设备上。

二、用ioct1函数操纵虚终端设备文件

虚终端,也叫虚屏,它的英文名字为virtual terminal,缩写为VT或vt。在Unix系统用户中,虚终端有着广泛的应用。它解决了主控台单一交互界面的限制,使用户可在保护当前界面的情况下启用另一界面去做另一工作。我们可利用Unix系统提供的系统调用来编制虚终端程序,并可把它加入到我们的应用程序中去。本人就在此虚终端程序的基础上编写了图形软件,它能够保存和恢复先前的界面。可利用ioct1函数操纵虚终端设备文件,实现与Unix系统内核的交互,得到我们所需要的服务。使用ioct1的具体形式如下: int ioct1(int filedes,int request,…/*参数*/) 其中filedes为打开的虚终端设备文件描述符,request为请求的服务,随后的参数可为各种数据类型,视具体情况而定。与虚终端有关的用于ioct1调用中

request值主要有以下几个:

VT_OPENQRY 查找一个可利用的虚终端。用于ioct1系统调用的参数是一个指向长整数的指针。该长整数的值将被置为第一个可利用的无进程在其上打开的虚终端的序号。如果没有可利用的虚终端,则该长整数的值被置为-1。VT_GETMODE 获取活动虚终端当前所在的状态。用于ioct1系统调用的参数是一个指向 vt_mode结构的指针。结构vt-mode定义如下:

struct vt-mode {

char mode;/* VT mode */

char waitv;/* if set,hang on writes when not active */

short relsig;/*signal to use for release request */

short acqsig; /*signal to use for display acquired */

short frsig; /*not use set to 0 */

}

在结构vt_mode中,mode字段的值可为VT_AUTO和VT_PROCESS,它们的宏定义如下:

#define VT_AUTO 0x00 /*自动切换*/

#define VT_PROCESS 0x01 /*进程控制切换*/

VT_SETMODE 设置虚终端模式(自动或进程控制)。用于ioctl系统调用的参数是一个″vt_mode″结构的指针(结构定义见VT_GETMODE)。

VT_GETSTATE 获取全部虚终端的状态信息。用于ioctl的系统调用的参数是一个指向vt_stat结构的指针,该结构定义如下:

struct vt_stat {

ushort v_active;/*活动的vt*/

ushort v_signal;/*要发送的信号(用于VT_SENDSIG)*/

ushort v_state; /*vt位掩码(VT_SENDSIG和VT_GETSTATE)*/

}

时间: 2024-11-03 04:26:05

终端tty、虚拟控制台及FrameBuffer的切换过程的相关文章

Linux 终端tty pty pts描述

在使用Linux的过程中,当我们通过ssh或者telnet等方式连接到服务器之后,会有一个相应的终端来对应.而在直接登陆到Linux服务器的时候也有一个对应的终端.也就是说所有登陆到当前Linux服务器的用户都有一个对应的终端,那他们有什么差异,终端到底是怎么一回事?本文作简要描述如下. 一.什么是终端(Terminal) 早期的计算机都属于大中型计算机,是个庞然大物,占用很大的空间,属于公用产品,好比现在的共享单车,大家一起用.不像现在的电脑,可以人手一部,直接操作.那肿么办呢,如何对这些计算

MHA 在线切换过程

    MySQL MHA 在线切换是MHA除了自动监控切换换提供的另外一种方式,多用于诸如硬件升级,MySQL数据库迁移等等.该方式提供快速切换和优雅的阻塞写入,无关关闭原有服务器,整个切换过程在0.5-2s 的时间左右,大大减少了停机时间.本文演示了MHA 在线切换并给出了在线切换的基本步骤.   1.MHA在线切换方式及要求    $ masterha_master_switch --master_state=alive --conf=/etc/app1.cnf --new_master_

第八周 进程的切换和系统的一般执行过程【转】

转自:http://www.cnblogs.com/20135305yg/p/5379542.html 一.进程切换的关键代码switch_to分析 进程的调度时机与进程的切换: 操作系统中的进程调度算法是从运行队列中选择一个新进程,选择的过程中运用了不同的策略 进程调度的时机: 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule() 内核线程可以直接调用schedule()进行进程切换,

Linux 前后台作业切换及脱机管理

    Linux bash shell单一终端界面下,我们经常需要管理或同时完成多个作业,如一边执行编译,一边实现数据备份,以及执行SQL查询等其他的任务.所有的上述的这些工作我们可以在一个bash内实现,也就是说在同一个终端窗口完成.下面主要描述了Linux下前后台作业切换与管理以及作业在脱机的情形下如何管理.   1.前后台作业的定义   前后台作业实际上对应的也就是前后台进程,因此也就有对应的pid.在这里我们统称为作业.   无论是前台作业还是后台作业,两者都来自当前的shell,是当

linux 终端下敲ctrl-c时,到底发生了什么?(转)

通过telnet登录到单板,然后按ctrl-c会发生什么情况,流程是怎么样的? 在分析之前,先介绍tty的相关知识.我们可以认为,所有跟输入输出相关的操作,最终都由tty来接管.举例来说,当我们敲 ls /dev时得到 [cpp] view plaincopy ls /dev/ -l   total 0   crw-------  1 root root     10, 235  8月 16 13:08 autofs   drwxr-xr-x  2 root root         720  

Linux 7.1 上的 oracle8.1.7安装过程记录。

oracle|过程 系统准备 ======== redhat8按server方式安装需要增加的安装包大类: 1 包含一个X系统,建议使用GNOME, 2 将开发工具包DEVELOP TOOLS选上,标准的GCC工具等就有了. 3 建议将NETWORK UTILIETY选上,nmap mtr之类的小工具很有用 安装大约1.4G空间 安装后将语言环境设置缺省的en_US.UTF-8 (在RedHat 7.3下缺省是en_US.iso885915)改成en_US root#vi /etc/syscon

移动多媒体网络中的无缝切换

摘要:第三代移动通信面临的一个重要的挑战就是要无缝集成固定和移动网络中的多媒体业务.对于移动用户来讲,网络支持的业务有图像.多媒体.数据以及不同服务级别的话音业务.为了满足以上业务需求,3G系统必须具有丰富的性能.如今普遍采用ATM技术的同质网络虽然支持很多用户,但此种网络结构不可能成为最终的解决方案(至少从学术界.网络设备制造商的观点来看).而以太网家族中高速设备的快速发展,已经部分代替了ATM.同时基于因特网业务的爆炸性增长,已经确保IP仍将成为下一代系统网络层协议.本文讨论了IP网因支持移

framebuffer的多进程操作

打开了framebuffer,你可以在其上画图,写字.屏幕上就及时能显示你往framebuffer里填充的内容.但是在多进程操作framebuffer的环境下,比如在一个拥有窗口管理环境下,操作framebuffer显示了全屏的一幅图片,此时窗口管理器有个进程在不断的更新系统当前时间,这样就存在当前图片显示不完整的情况. 此时实际上只需要当前进程显示完整的一幅图片,改图片的显示区域不希望被其他操作framebuffer的进程所干扰. 如何避免这种情况的发生?方法就是操作tty设备.原理很简单,就

基于IPv6的移动终端通信 无线应用成杀手级应用

近年来基于IP传输协议的移动通信发展迅速,但IPv4地址短缺的事实成了限制其发展的"瓶颈".IPv6与移动通信的结合将为目前的Internet开拓一个全新的领域.无线应用将成为IPv6的"杀手级"应用,同时也是展示IPv6巨大地址空间的舞台.移动互联网上有许多新型而精彩的服务,移动 IPv6将是实现这些服务的关键.当越来越多的移动终端需要配有IP地址时,IPv6将为所有的移动终端提供唯一的IPv6地址,并使得移动终端更易于配置和管理,实现IPv6移动终端之间随时随地