2013-03-07 90 views
2

我需要閱讀Linux中的stdin,但我的程序只接收沒有新行的消息。STDIN無需按ENTER鍵即可閱讀

我嘗試這樣的代碼,但不工作:

int main (void) 
{ 
    char p_char[48]; 

    memset(p_char, 0, sizeof(p_char)); 
    fcntl(STDIN_FILENO, F_SETFL, FNDELAY); 
    read(STDIN_FILENO, p_char, sizeof(p_char)); 

} 

有人有一個建議?

+3

這是你想要做的? http://stackoverflow.com/questions/421860/cc-capture-characters-from-standard-input-without-waiting-for-enter-to-be-pr – Mike 2013-03-07 17:47:51

+0

refr to http://stackoverflow.com/questions/ 7469139/what-is-equivalent-to-getch-getche-in-linux – MOHAMED 2013-03-07 18:02:09

回答

4

您需要更改終端設置,以便立即發送每個字符。您可以通過操作termios(手冊頁有詳細信息)來完成此操作。

本質上,它只是涉及創建兩個termios結構,初始化一個與tcgetattr的當前設置,複製結構的其它結構,在它修改緩衝設置,然後用tcsetattr設置終端與所述新的結構(和當然,當你完成後再設置它)。

+1

使用termios的示例http://stackoverflow.com/questions/7469139/what-is-equivalent-to-getch-getche-in-linux – MOHAMED 2013-03-07 17:59:08