linux常用輸入函數scanf和fgets通常都是阻塞式的: 1、如果用戶沒有輸入,則程式會阻塞等待用戶輸入輸入內容後,且需要用戶點回車鍵才能完成讀取鍵盤輸入。 2、用戶輸入的信息,會在屏幕上顯示出來。 以下代碼實現了: 1、用戶沒有輸入,則在設定時間過後,程式會繼續運行下去 2、用戶輸入信息不會 ...
linux常用輸入函數scanf和fgets通常都是阻塞式的:
1、如果用戶沒有輸入,則程式會阻塞等待用戶輸入輸入內容後,且需要用戶點回車鍵才能完成讀取鍵盤輸入。
2、用戶輸入的信息,會在屏幕上顯示出來。
以下代碼實現了:
1、用戶沒有輸入,則在設定時間過後,程式會繼續運行下去
2、用戶輸入信息不會在屏幕上顯示出來
3、程式能夠不等待回車,直接響應鍵盤輸入
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 5 #define TTY_PATH "/dev/tty" 6 #define STTY_US "stty raw -echo -F " 7 #define STTY_DEF "stty -raw echo -F " 8 9 #define UNUSED_PARAMTER(X) (void)(X) 10 11 static char get_char( void ) 12 { 13 fd_set rfds; 14 struct timeval tv; 15 char input_char = 0; 16 17 FD_ZERO(&rfds); 18 FD_SET(0, &rfds); 19 20 /** 21 * Set wait time 22 */ 23 //tv.tv_sec = 0; //seconds 24 //tv.tv_usec = 500; //microseconds 25 26 /*Check for keyboard input.*/ 27 if (select(1, &rfds, NULL, NULL, &tv) > 0) 28 input_char = getchar(); 29 30 return input_char; 31 } 32 33 char nonblocking_input( void ) 34 { 35 char input_char; 36 37 system(STTY_US TTY_PATH); 38 39 usleep(100); 40 input_char = get_char(); 41 42 system(STTY_DEF TTY_PATH); 43 44 return input_char; 45 } 46 47 int main(int argc, char **argv) 48 { 49 UNUSED_PARAMTER(argc); 50 UNUSED_PARAMTER(argv); 51 52 char input_char; 53 54 input_char = nonblocking_input(); 55 56 printf("\n\tYour input is %c!\n", input_char); 57 printf("\nApplication finish.\n\n"); 58 59 return 0; 60 }test.c