1 前言
编写测试工具的时候,需要实时的读取终端的输入(不需要按下enter键才读取), 然后执行相应命令,所以研究了下如何在linux下监听键盘信息。本例子采用了阻塞读取串口终端的方式,可以修改成另起一个线程。
2 终端IO的三种模式
2.1 canonical 模式
这个模式也叫做cooked模式。在这种模式下,终端设置每次返回一行数据,换句话说就是遇到换行符才输出,返回的buffer里会包含换行符。所有的特殊字符都会被解释(例如: ^c, ^c)
2.2 nocanonical 模式
这种模式也叫做raw 模式。在这种模式下终端每次返回一个字符而不是先收集一行的数据再返回。特殊的字符也不会被特别对待,需要自己处理。终端的编辑器vi就处于这种模式下,可以完全控制输入输出字符。
2.3 raw 模式
不会处理特殊字符,关闭回显,输入按单个字符读取。
3 终端控制结构
终端设备的所有能控制的属性都通过下面这个结构控制. go语言此结构定义在syscall包中.