不用回車讀取乙個字元

2021-09-06 01:28:03 字數 1019 閱讀 3061

今天看到乙份shell原始碼,其中有用到不輸入回車即可收到字元的功能,在這份原始碼中,它的作用是在shell中接收上下鍵,執行歷史命令。

原始**:

/* 如何實現不用回車,就能讀取乙個字元,此程式可以用來檢視鍵盤的字元編碼 */ /* 以「上方向鍵」為例,3個字元分別是27, 79,和65。a> 而上面的getch()函式中的read()函式1次只從標準輸入讀入1個字元, 所以在getch()讀入1個字元返回後再次被呼叫時,標準輸入的緩衝區中還有2個字元, 因此read()函式不會阻塞(儘管我們這時沒有再按下任何鍵),而是讀出第2個字元, 然後返回,然後又繼續讀入第3個字元。 所以按下1個方向鍵,getch()函式實際上被呼叫了3次。 */ #include#include#includestatic struct termios tty; void set_key(); void reset_key(); char getch(); main() reset_key(); } void set_key() void reset_key() char getch() return(ch); }

公升級版:

/* 改進版不用輸入回車,自動獲取字元, 這段**的功能是遮蔽掉其它按鍵的輸入,只接收esc, 回車以及四個方向鍵的輸入,並且顯示使用者的輸入。如果使用者按下esc鍵,程式就會結束。*/ #include #include static struct termios tty; enum key; void set_key(); void reset_key(); enum key getch(); int main(int argc, char *argv) } reset_key(); return 0; } void set_key() void reset_key() /* 修改了getch函式,由於上下左右方向鍵的字元編碼特殊,所以在read中如果一次讀取只有乙個字元,那麼就是普通字元, 如果是三個字元,那麼就是方向鍵,再通過判斷最後乙個字元的內容就可以確定是方向鍵中的那乙個。 */ enum key getch() break; case 3: switch(ch[2]) } } return none; }

乙個字元驅動

實現乙個基本框架 define notice fmt,args.printk kern notice scull fmt,args define error fmt,args.printk kern err scull fmt,args static init int scull init void...

不按回車就接受乙個字元輸入

不按回車就接受乙個字元輸入 記得前幾天的一篇日誌 http blog.csdn.net anyue417 archive 2006 08 14 1064145.aspx 中寫到,像下面這樣的程式問題 如下 include void main 果然也只執行了3次,但不受什麼字元不字元,整型不整型的影響...

c c ,輸入乙個字元

getch getche 和getchar 函式 1 getch 和getche 函式 這兩個函式都是從鍵盤上讀入乙個字元。其呼叫格式為 getch getche 兩者的區別是 getch 函式不將讀入的字元回顯在顯示螢幕上,而getche 函式卻將讀入的字元回顯到顯示螢幕上。例1 include ...