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退出
时间: 2024-10-05 02:51:40