Если вы работаете в POSIX-совместимой ОС, вам нужно поиграть с флагами локального терминала управления (термин ios) для stdin
, используя tcgetattr()
и tcsetattr()
:
#include <stdio.h>
#include <termios.h>
int main(int argc, char *argv[])
{
printf("Enter password: ");
struct termios term;
tcgetattr(fileno(stdin), &term);
term.c_lflag &= ~ECHO;
tcsetattr(fileno(stdin), 0, &term);
char passwd[32];
fgets(passwd, sizeof(passwd), stdin);
term.c_lflag |= ECHO;
tcsetattr(fileno(stdin), 0, &term);
printf("\nYour password is: %s\n", passwd);
}
Возможно, вы захотите отключить дополнительные флаги во время ввода. Это всего лишь пример. Остерегайтесь прерываний - вы действительно хотите сбросить состояние терминала, даже если ваша программа прервана.
Также это, вероятно, может работать не для всех типов tty
.