首页 > 代码库 > linux记录键盘
linux记录键盘
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<termios.h> 5 #include<term.h> 6 #include<curses.h> 7 #include<unistd.h> 8 static struct termios initial_settings,new_settings; 9 static int peek_character=-1;10 void init_keyboard();11 void close_keyboard();12 int check_keyboard();13 int readch();14 int main()15 {16 int ch=0;17 init_keyboard();18 while(ch!=‘q‘)19 {20 printf("looping\n");21 sleep(1); 22 if(check_keyboard())23 {24 ch=readch();25 /// scanf("%c",&ch);26 printf("You hit %c\n",ch);27 }28 }29 close_keyboard();30 exit(0);31 }32 33 int readch()34 {35 char ch;36 if(peek_character!=-1)37 {38 ch=peek_character;39 peek_character=-1;40 return ch;41 }42 read(0,&ch,1);43 return ch;44 } 45 46 void init_keyboard()47 {48 tcgetattr(0,&initial_settings);49 new_settings=initial_settings;50 new_settings.c_lflag &=~ICANON;51 new_settings.c_lflag &=~ECHO;52 new_settings.c_lflag &=~ISIG;53 new_settings.c_cc[VTIME]=0;54 new_settings.c_cc[VMIN]=1;55 tcsetattr(0,TCSANOW,&new_settings);56 }57 58 void close_keyboard()59 {60 tcsetattr(0,TCSANOW,&initial_settings);61 }62 63 int check_keyboard()64 {65 char ch;66 int nread;67 if(peek_character!=-1)68 {69 return 1;70 }71 new_settings.c_cc[VMIN]=0;72 tcsetattr(0,TCSANOW,&new_settings);73 nread=read(0,&ch,1);74 new_settings.c_cc[VMIN]=1;75 tcsetattr(0,TCSANOW,&new_settings);76 if(nread==1)77 {78 peek_character=ch;79 return 1;80 }81 return 0;82 }
如图所示,按q退出
linux记录键盘
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。