Dans le monde Linux, le masquage n'est généralement pas effectué avec des astérisques, normalement l'écho est simplement désactivé et le terminal affiche des blancs. su
ou se connecter à un terminal virtuel, etc.
Il existe une fonction de bibliothèque pour gérer l'obtention des mots de passe, elle ne masque pas le mot de passe avec des astérisques mais désactive l'écho du mot de passe dans le terminal. J'ai tiré cela d'un livre sur Linux que j'ai. Je crois que cela fait partie du standard Posix.
#include <unistd.h>
char *getpass(const char *prompt);
/*Returns pointer to statically allocated input password string
on success, or NULL on error*/
La fonction getpass() désactive tout d'abord l'écho et tout traitement des caractères spéciaux du terminal (tels que les interruptions de service). caractères spéciaux du terminal (tels que le caractère d'interruption, normalement Control-C).
Il imprime ensuite la chaîne pointée par prompt, et lit une ligne d'entrée de d'entrée, et renvoie la chaîne d'entrée à terminaison nulle avec la le saut de ligne de queue, comme résultat de la fonction.
Une recherche google pour getpass() donne une référence à l'implémentation GNU (qui devrait être dans la plupart des distributions linux) et quelques exemples de code pour implémenter le vôtre si nécessaire.
http://www.gnu.org/s/hello/manual/libc/getpass.html
Leur exemple pour rouler votre propre :
#include <termios.h>
#include <stdio.h>
ssize_t
my_getpass (char **lineptr, size_t *n, FILE *stream)
{
struct termios old, new;
int nread;
/* Turn echoing off and fail if we can't. */
if (tcgetattr (fileno (stream), &old) != 0)
return -1;
new = old;
new.c_lflag &= ~ECHO;
if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
return -1;
/* Read the password. */
nread = getline (lineptr, n, stream);
/* Restore terminal. */
(void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
return nread;
}
Si nécessaire, vous pouvez vous en servir comme base et le modifier pour afficher des astérisques.
1 votes
Ne pouvez-vous pas simplement utiliser
getc(stdin)
au lieu degetch
?10 votes
Getc(stdin) résulte toujours en un écho de l'entrée sur le terminal. L'OP ne veut pas que l'entrée soit renvoyée sur le terminal.
0 votes
Comme susam Pal, getc() ou getc(stdin) ou fgetc(stdin) n'arrête pas l'écho.
0 votes
conio.h
n'est pas disponible sous Linux, nigetch()
est.0 votes
Regardez cette question : Quel est l'équivalent de getch() & getche() sous Linux ? .