发新话题
打印

请教一个和控制台下的键盘输入有关的问题

我希望在linux的控制台下达到这样一个效果:我的程序可以任意查询某个健的状态,如果有健按下则返回相应的健的信息,反之也立即返回,就像在dos下调用键盘中断.
; _* Y& {# k/ \还有,我不想使用现成的库,比如ncurses,sdl等等.9 \0 `3 Y/ [4 X: ?! I* k4 C9 F! W
我也看了一些资料,但现在最接近我的希望的方案也只能达到这种效果:对每个健的动作(按下/释放)都可以检测,当然这时把控制台设为K_RAW模式,但查询健的时候仍然是从STDIN读,这样如果没有健按下,那么就一直等待而不会返回.我试着看sdl的源代码,但是遇到太多的困难.* |9 i$ M  w& {3 h' G
只好求助于大家了,谢谢.      

TOP

我发现了!!!+ ~9 Y2 l5 R8 }& Q9 L: Q. o% P
用函数select()就可以了,这个函数测试某个文件是否有可读的字节,
. I& m5 u% \" T% P0 z而且可以设定等待的时间上限,这样当确定某个tty可读再用read(). |9 s4 c9 }0 Z% r" R" }. L
就不会被阻塞了.见man 2 select.      

TOP

我也有一个程序,一个循环需要不断的查询键盘缓冲区,有键按下就取键值,请问怎样实现呢。在DOS下是kbhit()函数,但不是标准c库。select怎么用呢?谢谢。刚开始用linux编程,实在不知怎样弄。      

TOP

用select()固然可以实现这个功能,但用循环查询好像不是一个好办法.其实可以开两个线程,一个用通常的read()进行输入,结果有可能被阻塞掉,这时另外一个线程就接着处理别的工作.      

TOP

发新话题