Fonction pour afficher des * en C sous Linux
Résolu
Maknash
Messages postés
701
Statut
Membre
-
pyschopathe Messages postés 2053 Statut Membre -
pyschopathe Messages postés 2053 Statut Membre -
Bonjour,
Je suis sous Linux et j'essaie de faire un programme avec login et mot de passe.
J'essaie donc que quand l'utilisateur entre son mot de passe ça affiche des *********.
Sous Windows je sais le faire avec la fonction getch(mdp); mais elle est dans le myconio.h mais vu que cette librairie est utilisée sous Windows et non sous Linux, il m'est impossible de l'utiliser sous Linux.
Quelqu'un aurait-il une fonction ou un code à me proposer?
Merci d'avance
--
Je me disais que le mieux se serait de me faire passer pour un sourd-muet.
La vitesse de la lumière est plus rapide que celle du son, c'est pour cela qu'on a l'air intelligent avant d'avoir l'air con.
Je suis sous Linux et j'essaie de faire un programme avec login et mot de passe.
J'essaie donc que quand l'utilisateur entre son mot de passe ça affiche des *********.
Sous Windows je sais le faire avec la fonction getch(mdp); mais elle est dans le myconio.h mais vu que cette librairie est utilisée sous Windows et non sous Linux, il m'est impossible de l'utiliser sous Linux.
Quelqu'un aurait-il une fonction ou un code à me proposer?
Merci d'avance
--
Je me disais que le mieux se serait de me faire passer pour un sourd-muet.
La vitesse de la lumière est plus rapide que celle du son, c'est pour cela qu'on a l'air intelligent avant d'avoir l'air con.
11 réponses
-
/*convertire le caractere entré en * a chaque saisire*/
repeat
getchar(x);
x=*;
until false -
Merci mais ça ne fonctionne pas...
En plus getchar(x) on ne met jamais ça vu qu'on ne peut pas mettre de variable dans getchar... -
Je viens de voir qu'on pouvait utiliser <curses.h> à la place de <myconio.h> mais quand je l'utilise ça me met ceci :
undefined reference to `stdscr`
undefined reference to `wgetch`
J'ai fais une fonction getlettre(); pour pouvoir enregistrer chaque lettre :char getlettre() { char car; do car=getch(); while(car!='\r'); return(car); }
Où est le problème? Merci d'avance -
J'ai trouvé avec curses.h ça fonctionne.
Seulement j'ai un autre problème :#include <stdio.h> #include <curses.h> char getlettre(); int main(void) { char login[20], password[20]; FILE *flux; system("clear"); scanf("%s",login); printf("Password: "); do { password[i]=getlettre(); if(password[i]!='\r') printf("*"); }while(i<20 && (password[i-1]!='\r')); } /// Fonction getlettre() pour prendre les lettres char getlettre() { char car; do car=getch(); while(car!='\r'); return(car); }
En fait, dans mon code il ne passe pas le scanf du login je ne sais pas pourquoi.
Quelqu'un aurait une idée d'où ça pourrait venir??? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Je viens tout juste de me réveiller là lol en fait il ne faut pas que ça affiche des *, il faut que ça n'affiche absolument rien comme quand on entre le mot de passe sous Linux...
Quelqu'un aurait une idée???-
Je sais qu'il est possible de désactiver tout retour d'affichage dans une console en C (je l'ai fait il y a quelques années), mais je ne me souviens pas du tout comment. M'enfin cherche un truc comme "désactiver la sortie standard" ou quelque chose comme ça...
- Merci, je viens de regarder et j'ai trouvé ça http://www.commentcamarche.net/forum/affich 653183 dup linux c c
Seulement il met ça comme code :void substituer_sortie(char *fichier) { int fd; fd = open(fichier, O_WRONLY | O_CREAT, 0600); dup2(fd, 1); close(fd); }
Mais ça met une erreur disant que O_WRONLY et O_CREAT en sont pas déclarés, mais lui il ne les déclare pas...
-
-
Un petit man dup2 nous informe qu'il faut inclure la bibliothèque unistd.h... Un petit
#include <unistd.h>
et tout devrait marcher. -
Sur Google j'ai vu qu'il fallait :
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Sources : http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/open.2.html
Mais bon ça ne va pas... même avec ton include :(
Voici ce que j'ai comme code :#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> void substituer_sortie(char *fichier); int main(void) { char login[20], password[20]; FILE *flux; char *fichier; system("clear"); printf("Login: "); scanf("%s",login); printf("Password: "); substituer_sortie(fichier); return(0); } void substituer_sortie(char *fichier) { int fd; fd = open(fichier, O_WRONLY | O_CREAT, 0600); dup2(fd, 1); close(fd); }
Et en fait il ne va que jusqu'au scanf du login, après il marqué "appuyez sur ENTER"-
Oui, j'ai buggué des yeux, c'est dans la fonction open que sont utilisées les constantes... Et avec ces includes, ça ne marche toujours pas ?
- Ok merci, en attendant de trouver une version plus "portable", j'ai trouvé une solution qui ne fonctionne que pour Linux.
En fait je faissystem("stty -echo"); scanf("%s", password);
Et ça fonctionne très bien ainsi pour le moment, mais ce n'est pas du tout portable, je ne pourrai pas l'utiliser sous Windows, donc si tu trouves quelque chose de mieux dis-le moi, mais je mets quand même ce topic en "résolu".
Voir http://www.commentcamarche.net/faq/sujet 5977 entrer secretement un mot de passe en console
-
-
-
Non car login est un tableau et quand il s'agit de pointeurs ou de tableaux, on ne met jamais de & dans un scanf...
-
Non non ça c'est pour entrer un mot dans un champs de tableau, hors moi je voulais entrer un caractère par champs.
Moi j'utilise ça ainsi et ça fonctionne parfaitement, c'est le rôle du masque string %s pour les chaînes de caractères, en fait ça fait ça :
scanf("%s",login); -> root
Alors le tableau login[20] initialisé à
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
devient :
r o o t \0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -
Mince j'ai encore un problème, j'essaie de déconnecter l'utilisateur du programme de sa session j'ai essayé system("logout"); et system("exit"); mais ça ne fonctionne pas :(
-
Je ne suis vraiment pas sûr que ce soit possible comme ça... En fait, ton programme sera exécuté dans une console, un system(exit) se contentera de fermer cette console. Tu as sûrement des fonctions C pour directement interagir avec le système d'identification des utilisateurs, mais je ne les connais pas.
-