2
我創建使用C.製作終端輸入一定數目的字符
我試圖使一個兩位代碼地址的陣列位置Linux終端程序之後發送。 我不想在每兩位數字輸入後都敲入回車,我希望在輸入字符後直接通過scanf將輸入發送到我的緩衝區變量。
我沒有代碼示例,因爲我不知道如何解決此問題。
感謝您的幫助!
我創建使用C.製作終端輸入一定數目的字符
我試圖使一個兩位代碼地址的陣列位置Linux終端程序之後發送。 我不想在每兩位數字輸入後都敲入回車,我希望在輸入字符後直接通過scanf將輸入發送到我的緩衝區變量。
我沒有代碼示例,因爲我不知道如何解決此問題。
感謝您的幫助!
你有兩個選擇,它們以幾乎相同的方式解決同樣的問題。首先是在運行程序時使用stdbuf
;調用是:
stdbuf -i0 ./a.out
使用,防止stdin
被行緩衝,並讓您使用fread()
或類似的命令,因爲它發生檢索輸入。
另一種是把終端放在原始的模式下。這是很好的描述here。但缺點是控制角色不再被處理。在你的程序中,你
#include <termios.h>
main(){
struct termios trm;
tcgetattr(STDIN_FILENO, &trm); /* get the current settings */
trm.c_cc[VMIN] = 1; /* return after 1 byte read; you might make this a 2*/
trm.c_cc[VTIME] = 0; /* block forever until 1 byte is read */
tcsetattr(STDIN_FILENO, TCSANOW, &trm);
}
謝謝。我最終使用curses.h中的cbreak關閉了使用原始模式的練習。 – Aaron 2012-02-08 21:29:45