Termios输入功能不起作用

时间:2018-01-05 21:08:51

标签: c++ keyboard

我有一个功能:

int term_option(int option)
{
    struct termios attributes;
    switch(option)
    {

    case 0: // Echo On
        if(tcgetattr(STDIN_FILENO,&attributes) != 0) return (-1);
        attributes.c_lflag |= ECHO;
        attributes.c_lflag |= ICANON;
        attributes.c_lflag |= ISIG;
        if(tcsetattr(STDIN_FILENO,TCSANOW,&attributes) != 0) return (-1);
        break;

    case 1: // Echo Off
        if(tcgetattr(STDIN_FILENO,&attributes) != 0) return (-1);
        attributes.c_lflag &= ~(ECHO);
        if(tcsetattr(STDIN_FILENO,TCSAFLUSH,&attributes) != 0) return (-1);
        break;

    case 2: // Wait for the keyboard to be touched
        if(tcgetattr(STDIN_FILENO,&attributes) != 0) return (-1);
        attributes.c_lflag    &= ~(ICANON);
        attributes.c_cc[VMIN]  = 1;
        attributes.c_cc[VTIME] = 1;
        if(tcsetattr(STDIN_FILENO,TCSANOW,&attributes) != 0) return (-1);
        break;

    case 3:
        if(tcgetattr(STDIN_FILENO,&attributes) != 0) return (-1);
        attributes.c_lflag    &= ~(ICANON);
        attributes.c_lflag    &= ~(ISIG);
        attributes.c_cc[VMIN]  = 0;
        attributes.c_cc[VTIME] = 0;
        if(tcsetattr(STDIN_FILENO,TCSANOW,&attributes) != 0) return (-1);
        break;
    }
        return 0;
}

当我打电话给:

    term_option(1);
    term_option(3);

它根本不会返回任何内容。事实上,它似乎甚至没有被执行。我不确定为什么。是的,我确实使用了termios.h头文件。 有人有什么想法吗?

感谢。

以下是gdb结果:

https://pastebin.com/u3g8Xafn

1 个答案:

答案 0 :(得分:0)

请检查需要设置的波特率。 使用您正在使用的机器以及与之连接的设备。