linux下的getch模擬(無回顯讀取字元)
阿新 • • 發佈:2019-02-13
我們知道getchar()函式可以讀取一個字元,但是必須在按下回車鍵之後字元才會從緩衝區送給程式。如何在linux終端裡實現無回顯讀取字元呢?下面的程式碼給出了一個簡單有效的實現。
#include<stdio.h> #include<unistd.h> #include<termios.h> int main(){ int input; struct termios save, current; tcgetattr(0, &save);// 得到原來的終端屬性 current = save; current.c_lflag &= ~ICANON;// 設定非正規模式,如果程式每次要從終端讀取一個字元的話,這是必須的 current.c_lflag &= ~ECHO;// 關閉回顯 current.c_cc[VMIN] = 1;// 設定非正規模式下的最小字元數 current.c_cc[VTIME] = 0;// 設定非正規模式下的讀延時 tcsetattr(0, TCSANOW, ¤t);// 設定新的終端屬性 printf("input your data:\n"); while((input = getchar()) != 'q'){ printf("input=%c\n", input); } tcsetattr(0, TCSANOW, &save);// 恢復原來的終端屬性,以免干擾shall和之後的程式執行 return 0; }
參考資料: