2013-03-07 91 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