温馨提示×

如何在Linux下自定义getchar行为

小樊
83
2024-09-06 21:33:09
栏目: 智能运维

在 Linux 下,您可以通过使用 termios 库自定义 getchar() 函数的行为

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

int my_getchar() {
    struct termios old_term, new_term;
    int ch;

    // 获取当前终端设置
    tcgetattr(STDIN_FILENO, &old_term);

    // 复制旧终端设置到新设置
    new_term = old_term;

    // 关闭回显和规范模式
    new_term.c_lflag &= ~(ECHO | ICANON);

    // 应用新终端设置
    tcsetattr(STDIN_FILENO, TCSANOW, &new_term);

    // 读取一个字符
    ch = getchar();

    // 恢复旧的终端设置
    tcsetattr(STDIN_FILENO, TCSANOW, &old_term);

    return ch;
}

int main() {
    int ch;

    printf("Press any key to continue...\n");
    ch = my_getchar();
    printf("You pressed: %c\n", ch);

    return 0;
}

这个程序首先获取当前终端设置,然后创建一个新的设置,其中关闭了回显和规范模式。接下来,它将新设置应用于终端,并使用 getchar() 读取一个字符。最后,它恢复旧的终端设置。

这样,当您运行此程序时,它将立即响应您的按键,而不是等待您按下 Enter 键。同时,由于关闭了回显,按键不会显示在屏幕上。

0