在写仿console程序时遇到问题,termios及KEY_UP

之前在使用别人写好的console类,用来写一个仿控制台程序。写好后发现在有些机器上能跑,在有些上不能。其中主要有两个问题:

1. 输入回显问题

默认设置console为非规范模式,raw方式。

在AIX上不能正常回显,在使用gdb跟踪运行后发现在执行 if(echo>0)echo=-1时-1>0为true,然而,令人悲伤的是,这问题现在还没解决,如果有小伙伴发现请告诉我一下。 最后发现按我的设计并不可能出现echo>0,所以删掉的这些代码。 编译运行回显为输入4个字符回显一次,故再次跟踪,发现AIX在read时要输入4个字符才会读一次(我理解即是输入4个字符才会放入输入流中),之后在网上查了一下发现 newter.c_cc[VMIN]=1; newter.c_cc[VTIME]=0; 通过以上设置即可实现输入一个读一次,其中newter为termios。

有关termios详情可参考这篇文章

2.输入方向键显示[A等

在使用方向键时回显[A,同样使用gdb跟踪,发现输入的方向键值c与设置的方向键值不等,方向键值设置为KEY_UP= 0x415b1b; 之后采用KEY_UP=*(int*)("\033[A")来获得键值,这样既可得到方向键在不同系统机器上的键值(纯属猜测),同时当都采用longlong型而不用int时会出错(目前并不清楚原因,可能与类型转换有个)`。