2016-02-26
获得和设置终端属性
使用函数tcgetattr和tcsetattr可以获得或者设置termios。这样也可以检测和修改各种终端选择标志和特殊字符。
int tcgetattr(int filedes, struct termios *termptr)
int tcsetattr(int filedes, int opt ,const struct termios * termptr)
这两个函数都有一个指向termios结构的指针作为其参数,他们返回当前终端的属性,或者设置终端的属性。因为这两个函数只对终端设备进行操作,所以若fieldes并不引用一个终端设备则出错,errno设置为ENOTIY
tcsetattr的参数opt使我们可以指定在什么时候新的终端属性才起作用。
- TCSANOW 更改立即发生
- TCSADRAIN 发送了所有输出后更改才发生。若更改输出参数则应使用此选择项。
- TCSAFLUSH 发送了所有输出后更改才发生。更进一步,在更改发生时未读的所有输入数据都被删除。
tcsetattr函数的返回值无法判断属性是否设置成功
终端选择标志
所有列出的选择标志都用一或多位表示,而屏蔽标志则定义多为。屏蔽标志有一个定义名,每个值也有一个名字。例如,为了设置字符长度,首先用字符长度屏蔽标志CSIZE将表示字符长度的位清零,然后设置下列值之一CS5 CS6 CS7 CS8
- ALTWERASE 此标志设置时,若输入了WERASE字符,则使用一个替换的字擦除算法。它不是向后移动到前一个空白字符为止,而是向后移动到第一个非字母、数字字符为止。
- BRKINT 若此标志设置,而IGNBRK为设置,则在接到BREAK时,输入、输出队列被刷清,并产生一个SIGINT信号。如果此终端设备是一个控制终端,则将此信号送给前台进程组各进程。
- BSDLY 退格延迟屏蔽,此屏蔽的值是BS0或BS1
- CCTS_OFLOW 输出的CTS流控制
- CIGNORE 忽略控制标志
- CLOCAL 若设置,则忽略调制解调器状态线。则通常意味着该设备是本地连接的。若此标志未设置,则打开一个终端设备常常会阻塞到调制解调器回应。
- CRDLY 回车延迟屏蔽。此屏蔽的值是CR0 CR1 CR2 CR3
- CREAD 若设置,则接收装置被启动,可以接受字符
- CRTS_IFLOW 输入的RTS流控制
- CSIZE 此字段是一个屏蔽标志,它指明发送和接受的每个字节的位数。此长度不包括可能有的奇偶校验位。此屏蔽字定义的字段值是CS5 CS6 CS7 CS8分别表示每个字节包含5 6 7 8位
- CSTOPB 若设置,则使用两位作为停止位,否则只使用以为作为停止位。
- ECHO 若设置,则将输入字符会送到终端设备。在规范方式和非规范方式下都可以回送字符。
- ECHOCTL 若设置并且ECHO也设置,则除ascii tab 、ascii nl、start 和 stop字符外,其他ascii空字符都被回送为^X其中,X是相应控制字符代码值加0100所构成的字符。这就意味着 ascii Ctrl-A被回送为^A。ascii DELETE字符被回送为^?。若此标志未设置,则ascii字符按原样送回。
- ECHOE 若设置并且ICANON也设置,则ERASE字符从显示中擦除当前行中的最后一个字符。这通常是在终端驱动中写的三个字符序列:退格 空格 退格实现的。
- ECHOK 若设置并且ICANON也设置,则KILL字符从显示中擦除当前行,或者输出NL字符。若支持ECHOKE标志,则这里的说明假定ECHOKE标志没有设置
- ECHONL 若设置并且ICANON也设置,即使没有设置ECHO也回送NL字符
- ECHOPRT 如若设置并且ICANON和ECHO也都设置,则ERASE字符使所有正被查出的字符按他们被擦除的方式打印。
- FFDLY 换页延迟屏蔽,此屏蔽标志值是FF0或者FF1
- FLUSHO 若设置,则刷清输出。当键入DISCARD字符时设置此标志,当键入另一个DISCARD字符时,此标志被清除。设置或者清除此终端标志也可设置或清除此条件。
- HUPLC 若设置则当最后一个进程关闭此设备时,调制解调器控制线将至低电平
- ICANON 若设置,则按照规范方式工作。
- ICRNL 如若设置并且IGNCR未设置,则将接收到CR字符转换成一个NL字符
- IEXTEN 如若设置,则识别并处理扩充的、事先定义的特殊字符
- IGNBRK 在设置时,忽略输入中的BREAK条件。
- IGNCR 忽略接收到的CR字符。若未设置,而设置了ICRNL标志则将接收到的CR字符转换成一个NL字符
- IGNPAR 在设置时,忽略带有结构错误或者奇偶错误的输入字节。
- IMAXBEL 当输入队列满时响铃
- INLCR 接受的NL字符转换成CR字符
- INPCK 是输入奇偶校验起作用
- ISIG 若设置,则判别输入字符是否要产生终端信号的特殊字符,若是则产生相应的信号。
- ISTRIP 有效输入字节被剥离为7位。当未设置时保留为8位
- IUCLC 将输入的大邪制服映射为小写字符
- IXANY 使任意字符都能重新启动输出
- IXOFF 使启动-停止控制起作用,当终端驱动程序发现输入队列将要填满时,输出一个STOP字符。此字符应当由发送数据的设备识别,并使该设备暂停。伺候当一对输入队列中的字符进行处理后,该终端驱动程序将输出一个START字符,使该设备恢复发送数据。
- IXON 使启动-停止输出控制起作用。当终端驱动程序接收到一个STOP字符时,输出暂停。在输出暂停时,下一个START字符恢复输出。
- MDMBUF 按照调制解调器的载波标志进程输出流控制
- NLDLY 新行延迟屏蔽。此屏蔽的值是NL0 NL1
- NOFLSH 按系统默认,当中断驱动程序产生SIGINT和SIGQUIT信号时,输入输出队列都被刷新。另外,当它产生SIGSUSO信号时,输入队列被刷新。若设置了NOFLSH标志,则在这些信号产生式,不对输出输入队列进行刷新。
- NOKENRNINFO 此标志组织STATUS字符使前台进程组的状态信息显示在终端上。但是不论本标志是否设置,STATUS字符使SIGINFO信号送至前台进程组中的所有进程
- OCRNL 将输出的CR字符映射为NL
- OFDEL 将输出填充字符是ASCII DEL 否则它是ASCIINUL
- OFILL 为实现延迟,发送填充字符时而不是使用时间延迟。
- OLCUC 将小写字符映射为大写
- ONLCR 将输出的NL字符映射为CR-NL
- ONLRET 将输出的NL字符将执行回车功能
- ONOCR 在0列不输出CR
- ONOEOT 在输出中删除EOT字符
- OPOST 进行实现定义的输出处理。
- OXTABS 制表符在输出中被扩展为空格。
- PARENB 对输出字符产生奇偶位,对输入字符则执行奇偶位检查。
- PARMRK 当IGNOAR 设置则结构性错和奇偶错的字节由进程读作为三个字节序列。
- PARODD 输出和输入字符的奇偶性都是奇,否则为偶。
- PENDIN 若设置,则在下一个字符输入时,尚未读的任何输入都由系统重新打印。
- TABDLY 水平制表符延迟屏蔽。
- TOSTOP 如果支持作业控制则将信号SIGTTOU送到试图与控制终端的一个后台进程的进程组。按默认,此信号暂停改进进程组中的所有进程。如果写控制终端的进程忽略或阻塞此信号,则终端驱动程序不产生此信号。
- VTDLY 垂直指标延迟屏蔽。
- XCASE 如果设置ICANON也设置,则认为终端是大写终端,所以输入都变换为小写。为了输入一个大写字符,在其前增加一个\。
网友评论