无需按ENTER即可从STDIN读取

时间:2013-03-07 17:43:24

标签: c++ c linux serial-port stdin

我需要在Linux中读取stdin,虽然我的程序只会收到没有新行的消息。

我尝试了这段代码,但无法正常工作:

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) ); 

}

有人有建议吗?

1 个答案:

答案 0 :(得分:4)

您需要更改终端设置,以便立即发送每个字符。您可以通过操作termios(手册页有详细信息)来完成。

基本上它只涉及创建两个termios结构,用tcgetattr初始化一个当前设置,将结构复制到另一个结构,修改其中的缓冲区设置,然后设置终端使用tcsetattr的新结构(当然,在完成后将其设置回来)。