終端控制——如何在不輸入回車讀入字元
摘要:一般情況下,我們在終端輸入一些字元,輸入的同時可以編輯(增加,刪除,修改),然後輸入回車,這些字元被送到緩衝區。但是,在more程式和其他的程式中,比如遊戲中的快捷鍵,我們需要的是不用輸入回車就可以讀取字元。此時,我們就需要了解如何控制終端,使得在不輸入回車的情況下就可以讀入字元。
首先,我們看一下這個程式的實現:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/ioctl.h>
int kbhit();
int main(int argc, char *argv[])
{
int i=0;
int c=' ';
system("stty raw -echo");
printf("enter q to quit\n");
for (; c!='q';i++)
{
if (kbhit())
{
c=getchar();
printf("\n got %c, on iteration %d",c,i);
}
}
system("stty cooked echo");
return 0;
}
int kbhit()
{
int i;
ioctl(0,FIONREAD,&i);
return i;
}
解析:
system:呼叫shell來執行相關命令
stty raw:將終端設定為阻塞模式,實現實時讀取
ioctl:查詢鍵盤緩衝區狀態
函式名: ioctl
標頭檔案:#include<sys/ioctl.h>
功 能: 控制I/O裝置 ,提供了一種獲得裝置資訊和向裝置傳送控制引數的手段。用於向裝置發控制和配置命令 ,有些命令需要控制引數,這些資料是不能用read / write 讀寫的,稱為Out-of-band資料。也就是說,read / write 讀寫的資料是in-band資料,是I/O操作的主體,而ioctl 命令傳送的是控制資訊,其中的資料是輔助的資料。
用 法: int ioctl(int handle, int cmd,[int *argdx, int argcx]);
返回值:成功為0,出錯為-1
FIONREAD : 通過由ioctl的第三個引數指向的整數返回當前在本套介面接收緩衝區中的位元組數。本特性同樣適用於檔案,管道和終端。相關文章
- 如何在終端輸入密碼時顯示星號密碼
- 終極解密輸入網址按回車到底發生了什麼解密
- 如何用C++在不按回車的情況下獲取標準輸入中的字元C++字元
- 瀏覽器輸入URL回車後...瀏覽器
- sqlloader匯入含有回車的字元資料SQL字元
- 瀏覽器中輸入 URL 回車後瀏覽器
- Element 輸入框input響應回車事件事件
- 瀏覽器中輸入 URL 回車後...瀏覽器
- imemode 控制輸入法,控制輸入框的輸入法
- JNI 在命令列視窗輸入字元,不顯所輸入字元,顯指定的掩飾符命令列字元
- vue 輸入框輸入4位一空格,控制16位有效字元Vue字元
- 關於在textarea中輸入回車換行和空格字元的正常顯示 (轉)字元
- ncurses輸入函式:字元+字串的輸入函式字元字串
- 05 Shell read讀取控制檯輸入
- 2道面試題:輸入URL按回車&HTTP2面試題HTTP
- EXCEL中怎麼輸入@字元?Excel字元
- Mac——如何輸入⌘、⌥、⇧、⌃、⎋等特殊字元Mac字元
- input輸入框加入限制只能輸入正整數,輸入其他字元會自動清除字元
- 如何在MySQL中輸入中文MySql
- 如何在 Linux 中不輸入密碼執行 sudo 命令Linux密碼
- word怎麼輸入帶圈字元?字元
- PopChar for mac(特別字元輸入工具)Mac字元
- 限制鍵盤輸入字元/位數字元
- win10輸入法特殊字元怎麼輸入_win10微軟輸入法輸入特殊符號操作方法Win10字元微軟符號
- windows終端輸入pip install requests報錯:Fatal error in launcherWindowsError
- 微信小程式input輸入框設定最大可輸入字元數量微信小程式字元
- 輸入框點選按鈕清除輸入的所有字元的封裝字元封裝
- 筆記本鍵盤失靈自動不停輸入如何修復 筆記本不受控制的輸入字元筆記字元
- 實現多子型別輸入法:如何在 HarmonyOS中載入不同的輸入模式型別模式
- 讀入、輸出優化優化
- 如何在Java後端對輸入進行簡單驗證? - tejanshranaJava後端
- android edittext InputFilter 輸入控制AndroidFilter
- 輸入一個ASCII碼,輸出對應的字元ASCII字元
- 將輸入的字元轉化為int格式輸出字元
- 瀏覽器位址列輸入url回車之後發生了些什麼瀏覽器
- 在瀏覽器輸入一個網址回車後,發生了什麼?瀏覽器
- mysql客戶端在命令列下無法輸入中文字元MySql客戶端命令列字元
- Java分解質因數,如輸入8,輸出8=2*2*2Java