如何使用IOCTL系统调用来禁用按键回音和缓冲?

时间:2015-09-27 16:09:52

标签: c

我知道它与struct termios有关但我无法通过阅读手册页来解决这个问题。我的目标是,无论何时按下键盘上的按钮,它都会被读取而不会输入,它将不会打印在我的程序屏幕上。显然,这两者对于创建游戏都很重要。谢谢!

1 个答案:

答案 0 :(得分:1)

以下是基于this post的示例:

#include <stdio.h>
#include <unistd.h>
#include <termios.h>

int main(int argc, char** argv)
{
    struct termios old, new;
    tcgetattr(STDIN_FILENO, &old);          // get current settings
    new = old;                              // create a backup
    new.c_lflag &= ~(ICANON | ECHO);        // disable line buffering and feedback
    tcsetattr(STDIN_FILENO, TCSANOW, &new); // set our new config

    printf("Reading 5 characters without local echo...\n");
    for (int i = 0; i < 5; i++)
    {
        char x = getchar();
        printf("[%c] ", x);
    }
    printf("\nRestoring terminal config\n");
    tcsetattr(STDIN_FILENO, TCSANOW, &old);
    return 0;
}