1. 程式人生 > >linux下的getch模擬(無回顯讀取字元)

linux下的getch模擬(無回顯讀取字元)

我們知道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;
}

參考資料: