gpt4 book ai didi

c - 如何更改 linux 终端中的回显字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:37 27 4
gpt4 key购买 nike

我有兴趣从用户那里收集密码。

当提示用户输入密码时,我想为他们输入的每个字符回显 *(星号)。

void changeEcho() {
termios term;
tcgetattr(STDIN_FILENO, &term);
term.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &term);
}

我知道这会关闭回声,但我有兴趣回声我选择的内容,在我的例子中是“*”。

最佳答案

您描述的功能与回声无关。相反,您可以通过简单地读取一个字符并在循环中写入一个 * 来自己实现它:

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


int main() {
char c;
char p = '*';
struct termios term, original;
tcgetattr(STDIN_FILENO, &term);
original = term;
term.c_lflag &= ~ECHO & ~ICANON;
tcsetattr(STDIN_FILENO, TCSANOW, &term);

while (read(STDIN_FILENO, &c, 1) == 1 && c != '\n')
write(STDOUT_FILENO, &p, 1);
printf("\n");

tcsetattr(STDIN_FILENO, TCSANOW, &original);
return 0;
}

当你运行它并输入内容时,你看到的只是*:

$ gcc foo.c && ./foo
***********

由程序来存储字符串、处理退格键以及每个多字节字符只显示一个 *

关于c - 如何更改 linux 终端中的回显字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55930695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com