Skip to content
On this page

终端临时隐藏输入字符


标签:代码片段C/unix  

在 Linux 终端中,如果您需要隐藏用户的输入字符,例如输入密码时需要隐藏输入的字符,可以用 termios 库中的函数来实现。

下面是一个演示如何隐藏终端中输入字符的简单示例程序,使用了 C 语言和 termios 库:

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

int main() {
    struct termios old, new;
    char password[50];

    // 获取终端属性
    tcgetattr(STDIN_FILENO, &old);
    new = old;
    new.c_lflag &= ~(ECHO); // 隐藏输入字符
    tcsetattr(STDIN_FILENO, TCSANOW, &new);

    // 输入密码
    printf("Enter Password: ");
    scanf("%s", password);

    // 恢复终端属性
    tcsetattr(STDIN_FILENO, TCSANOW, &old);

    // 显示输入的密码
    printf("\nPassword: %s\n", password);
    return 0;
}

在这个示例程序中,我们使用了 termios 库中的 tcgetattrtcsetattr 函数,用于获取和设置终端属性。我们将终端属性存储在 oldnew 变量中,然后将 new 变量中的 ECHO 标志位清零,以隐藏用户的输入字符。在接下来的输入密码过程中,输入的字符将不会被回显在终端上。在输入完成后,我们再次使用 tcsetattr 函数将终端属性恢复到原来的状态,以恢复回显功能。

需要注意的是,在使用 termios 库的时候,需要包含头文件 termios.h

Last updated: