话说,仅仅是一个键盘检测就好麻烦。我还是懂的太少了。。。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define key_ESC 27
void init_keyboard();
void close_keyboard();
int kbhit();
int readch(); /* 相关函数声明 */
static struct termios initial_settings, new_settings;
static int peek_character = -1; /* 用于测试一个按键是否被按下 */
/* 检测键盘按键的函数 */
int kbhit()
{
char ch;
int nread;
if ( peek_character != -1 )
return(1);
new_settings.c_cc[VMIN] = 0;
tcsetattr( 0, TCSANOW, &new_settings );
nread = read( 0, &ch, 1 );
new_settings.c_cc[VMIN] = 1;
tcsetattr( 0, TCSANOW, &new_settings );
if ( nread == 1 )
{
peek_character = ch;
return(1);
}
return(0);
}
/* 用来接收按下的按键,并peek_character = -1恢复状态 */
int readch()
{
char ch;
if ( peek_character != -1 )
{
ch = peek_character;
peek_character = -1;
return(ch);
}
read( 0, &ch, 1 );
return(ch);
}
/* 配置终端函数 */
void init_keyboard()
{
tcgetattr( 0, &initial_settings );
new_settings = initial_settings;
new_settings.c_lflag &= ~ICANON;
new_settings.c_lflag &= ~ECHO;
new_settings.c_lflag &= ~ISIG;
new_settings.c_cc[VMIN] = 1;
new_settings.c_cc[VTIME] = 0;
tcsetattr( 0, TCSANOW, &new_settings );
}
void close_keyboard()
{
tcsetattr( 0, TCSANOW, &initial_settings );
}
int main(int argc, char const *argv[])
{
int ch = 0;
init_keyboard();
printf( "You can put ESC to quit!\n" );
while ( ch != 27 )
{
if ( kbhit() )
{
ch = readch();
if ( ch != 27 )
printf( "You put %c ! Only put ESC can quit! \n", ch );
}
}
close_keyboard();
return 0;
}
参考:
http://blog.163.com/liang_w_yan/blog/static/210657088201332444016981/
原文:http://my.oschina.net/itfanr/blog/365285