当前位置: 技术问答>linux和unix
【100分】在Linux C下如何获取按键值?
来源: 互联网 发布时间:2016-11-12
本文导语: 想写一个程序,读取键盘上的按键值: 两个线程在不停的运转,我想在这些线程运行的同时,获取按键值,从而控制(结束)线程(当然线程已经通过信号量和互斥变量处理)。 请问是否有相应的函数或者具体的实...
想写一个程序,读取键盘上的按键值:
两个线程在不停的运转,我想在这些线程运行的同时,获取按键值,从而控制(结束)线程(当然线程已经通过信号量和互斥变量处理)。
请问是否有相应的函数或者具体的实现代码。
不胜感激!
已经尝试过自己写khbit(),但是这个不能及时的获取中断信息。
两个线程在不停的运转,我想在这些线程运行的同时,获取按键值,从而控制(结束)线程(当然线程已经通过信号量和互斥变量处理)。
请问是否有相应的函数或者具体的实现代码。
不胜感激!
已经尝试过自己写khbit(),但是这个不能及时的获取中断信息。
|
getchar读,另外,刚才的代码的settermios函数没写好
#include
#include
#include
#include
#include
void settermios(int flag)
{
if(flag)
system("stty cbreak -echo");
else
system("stty cooked echo");
}
int kbhit(void)
{
struct timeval tv;
fd_set rdfs;
tv.tv_sec = 0;
tv.tv_usec = 0;
FD_ZERO(&rdfs);
FD_SET (STDIN_FILENO, &rdfs);
select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);
return FD_ISSET(STDIN_FILENO, &rdfs);
}
int main()
{
settermios(1);
while(!kbhit()){
printf("No keys are pressedn");
sleep(1);
}
printf("You pressed:%c n",getchar());
settermios(0);
return 0;
}
|
这种方法是可以的,楼主也是想只要按下某个键(不需要回车)就可以接收。
我想了一下,是不是由于行缓冲的缘故。可以用setbuf()设置不缓冲,然后用read()调用读取标准输入的值,每次读取一个字节,这样应该可以了。