linux-kbhit函数

来源:互联网 发布:怎样注册淘宝网店 编辑:程序博客网 时间:2024/05/17 03:48
#include "kbhit.h"#include "stdio.h"#include "termios.h"static struct termios initial_settings,new_settings;static int peek_character=-1;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 kbhit(){unsigned 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;}int readch(){char ch;if(peek_character!=-1){ch=peek_character;peek_character=-1;return ch;}read(0,&ch,1);return ch;}main(){int ch=0;init_keyboard();while(ch!=27){printf("looping\n");usleep(1000);if(kbhit()){ch=readch();printf("you hit %d\n",ch);}}close_keyboard();}

0 0