2012-02-08 28 views
2

我創建使用C.製作終端輸入一定數目的字符

我試圖使一個兩位代碼地址的陣列位置Linux終端程序之後發送。 我不想在每兩位數字輸入後都敲入回車,我希望在輸入字符後直接通過scanf將輸入發送到我的緩衝區變量。

我沒有代碼示例,因爲我不知道如何解決此問題。

感謝您的幫助!

回答

1

你有兩個選擇,它們以幾乎相同的方式解決同樣的問題。首先是在運行程序時使用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); 
} 
+0

謝謝。我最終使用curses.h中的cbreak關閉了使用原始模式的練習。 – Aaron 2012-02-08 21:29:45