UNIX环境高级编程读书笔记(十一)—终端IO (1)

1.什么是Linux的终端I/O,它分为几种类型。

       终端是一种字符型设备,有多种类型,通常使用tty来简称各种类型的终端设备。终端特殊设备文件一般有以下几种: 串行端口终端(/dev/ttySn) ,伪终端(/dev/pty/),控制终端(/dev/tty) ,控制台终端(/dev/ttyn, /dev/console).

1. 串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0)、/dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0)、(4,1)等,分别对应于DOS系统下的COM1、COM2等。

2. 伪终端(Pseudo Terminal)是成对的逻辑终端设备,例如/dev/ptyp3和/dev/ttyp3(在设备文件系统中分别是/dev/pty/m3和/dev/pty/s3),它们与实际物理设备并不直接相关。对于ttyp3(s3),任何设计成使用一个串行端口设备的程序都可以使用该逻辑设备。但对于使用ptyp3的程序,则需要专门设计来使用ptyp3(m3)逻辑设备。 如果使用telnet远程登录,则telnet会开始连接到设备ptyp2(m2)上(一个伪终端端口上)。此时一个getty程序就应该运行在对应的ttyp2(s2)端口上。当telnet从远端获取了一个字符时,该字符就会通过m2、s2传递给getty程序,而getty程序就会通过s2、m2和telnet程序往网络上返回”login:”字符串信息。登录程序与telnet程序就通过“伪终端”进行通信,通过使用适当的软件,就可以把两个甚至多个伪终端设备连接到同一个物理串行端口上。因为只存在16个ttyp(ttyp0—ttypf)的设备文件,就使用了象q、r、s等字符来代替p。例如,ttys8和ptys8就是一个伪终端设备对。目录/dev/pts是一个类型为devpts的文件系统,并且可以在被加载文件系统列表中看到。虽然/dev/pts象是设备文件系统中的一项,但它其实是一种不同的文件系统。

3. 如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令”ps –ax”来查看进程与哪个控制终端相连使用命令”tty”可以查看它具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。

4.  Linux系统中,计算机显示器通常被称为控制台终端(Console),它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。当你在控制台上登录时,使用的是tty1。使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去。tty1 –tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。只有系统或超级用户root可以向/dev/tty0进行写操作 .

2.终端I/O有两种不同的工作方式:

(1) 规范方式输入处理。在这种方式中,终端输入以行为单位进行处理。对于每个读要求驱动程序最多返回一行。

(2) 非规范放式输入处理。输入字符不以行为单位进行装配。

3.终端标志

在Unix/Linux终端设备特性都包含在termios结构中。该结构在头文件<termios.h>中定义。

struct termios{

       tcflag_t c_iflag; /*输入标志*/

       tcflag_t c_oflag;/*输出标志*/

       tcflag_t c_cflag;/*控制标志*/

       tcfag_t c_lflag;/*本地标志*/

       cc_t c_cc[NCCS];/*控制字符*/

};

 

下面对他们分别进行介绍。

字段

标志

说明

c_iflag

BRKINT

接到BREAK时产生SIGINT

 

ICRNL

将输入的CR转换为NL

 

IGNBRK

忽略BREAK条件

 

IGNCR

忽略CR

 

IGNPAR

忽略奇偶错字符

 

IMAXBEL

在输入队列空时振铃

 

INLCR

将输入的NL转换为CR

 

INPCK

打开输入奇偶效验

 

ISTRIP

剥除输入字符的第8位

 

IUCLC

将输入的大写字符转换成小写字符

 

IXANY

使任一字符都重起动动输出

 

IXOFF

使起动/停止输入控制流起作用

 

IXON

使起动/停止输出控制流起作用

 

PARMRK

标记奇偶错

 

c_oflag

BSDLY

退格延迟屏蔽

 

CRDLY

CR延迟屏蔽

 

FFDLY

换页延迟屏蔽

 

NLDLY

NL延迟屏蔽

 

OCRNL

将输出的CR转换为NL

 

OFDEL

填充符为DEL,否则为NUL

 

OFILL

对于延迟使用填充符

 

OLCUC

将输出的小写字符转换为大写字符

 

ONLCR

将NL转换为CR-NL

 

ONLRET

NL执行CR功能

 

ONOCR

在0列不输出CR

 

ONOEOT

在输出中删除EOT字符

 

OPOST

执行输出处理

 

OXTABS

将制表符扩充为表格

 

TABDLY

水平制表符延迟屏蔽

 

VTDLY

垂直制表延迟屏蔽


你可能感兴趣的:(linux,读书笔记,apue)