终端io(二)

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也设置,则认为终端是大写终端,所以输入都变换为小写。为了输入一个大写字符,在其前增加一个\。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,130评论 2 34
  • 2016-02-25 终端io 终端io两种不同的工作方式:规范方式输入处理,以行为单位进行处理。非规范方式处理,...
    千里山南阅读 949评论 0 0
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,856评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,590评论 18 139
  • 26.1 引言 远程登录(Remote Login)是Internet上最广泛的应用之一。我们可以先登录(即注册)...
    张芳涛阅读 3,767评论 0 6