Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2250 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [C] supprimer les echos de caracteres sur Unix

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] supprimer les echos de caracteres sur Unix

n°406911
Giz
Posté le 11-02-2004 à 14:35:18  profilanswer
 

Voilà j'aimerais savoir comment on peut supprimer l'echo des caracteres a l'ecran (en tapant dans une console). Je dois faire le programme en consequence. Quelle(s) fonction(s) dois-je utiliser ?
Ce cas de figure apparait lorsque on saisi son mot de pass pour se logger par exemple.
J'ai deja pas mal chercher mais je n'ai pas trouver.  
(je reflechissais autour de dup() et dup2()...mais kedalle) :/
 
Dans un 2eme tps, j'aimerais savoir comment un programme lance en arriere plan peut recuperer des caracteres saisis sur une console. ex : le gars tape une commande et moi je recupere ce qu'il a tape grace au programme tournant en arriere plan et qui les stocke ds un fichier (je ne sais pas si c possible mais je demande!)
 
Merci


Message édité par Giz le 11-02-2004 à 14:36:13
mood
Publicité
Posté le 11-02-2004 à 14:35:18  profilanswer
 

n°406919
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 11-02-2004 à 14:41:38  profilanswer
 

ce sujet a plutôt sa place dans programmation je pense.
 
t'as regardé du coté de la lib readline ??

n°406921
firstorang​utan
Posté le 11-02-2004 à 14:44:02  profilanswer
 

Amuses toi avec la commande stty
Il me semble que l'option est stty echoe / stty -echoe
A confirmer je n'ai d'unix sous la main en c moment.
 
Pour la deuxième question, en cherchant bien, ca doit pouvoir ce faire.
 
Tu serais pas en train d'essayer de nous faire un cheval de troie par hazard?  :whistle:

n°406925
arsunik
ma tuxitude me beastifie
Posté le 11-02-2004 à 14:46:39  profilanswer
 

Hmm de mémoire, tu ouvres "/dev/tty" et tu utilises ioctl.

n°407021
Dark_Schne​ider
Close the World, Open the Net
Posté le 11-02-2004 à 16:56:22  profilanswer
 

monsieur veut récupérer les mots de passes des utilisateurs ? :D


---------------
Mandriva : parce que nous le valons bien ! http://linux-wizard.net/index.php
n°407023
Taz
bisounours-codeur
Posté le 11-02-2004 à 16:58:56  profilanswer
 

Dark_Schneider a écrit :

monsieur veut récupérer les mots de passes des utilisateurs ? :D

c'est pas marrant, parce que c'est un sujet beaucoup plus complexe que ça, masquer l'echo ne suffit pas

n°407025
Taz
bisounours-codeur
Posté le 11-02-2004 à 17:03:40  profilanswer
 

mauvaise cat d'ailleurs. modo :o

n°407078
axey
http://www.00f.net
Posté le 11-02-2004 à 18:33:10  profilanswer
 

Extrait de pure-ftpd :
 

Code :
  1. #ifdef HAVE_POSIX_TERMIOS
  2. # include <termios.h>
  3. #elif defined(HAVE_TERMIO_H)
  4. # include <termio.h>
  5. #elif defined(HAVE_SGTTY_H)
  6. # include <sgtty.h>
  7. #endif
  8. static void disable_echo(void)
  9. {
  10.     if (!isatty(0)) {
  11.         return;
  12.     }
  13. #ifdef ECHO
  14. # ifdef HAVE_POSIX_TERMIOS
  15.     {
  16.         struct termios p;
  17.         if (tcgetattr(0, &p) != 0) {
  18.             return;
  19.         }
  20.         p.c_lflag &= ~ECHO;
  21. #  ifndef TCSAFLUSH
  22. #   define TCSAFLUSH 0
  23. #  endif
  24.         tcsetattr(0, TCSAFLUSH, &p);
  25.     }
  26. # elif defined(HAVE_TERMIO_H) && defined(TCGETA)
  27.     {
  28.         struct termio tty;
  29.         if (ioctl(0, TCGETA, &tty) != 0) {
  30.             return;
  31.         }
  32.         tty.c_lflag &= ~ECHO;
  33.         ioctl(0, TCSETA, &tty);
  34.     }
  35. # else
  36.     {
  37.         struct sgttyb tty;
  38.         if (ioctl(0, TIOCGETP, &tty) != 0) {
  39.             return;
  40.         }
  41.         tty.sg_flags &= ~ECHO;
  42.         ioctl(0, TIOCSETN, &tty);
  43.     }
  44. # endif
  45. #endif


 

n°407766
Giz
Posté le 12-02-2004 à 14:30:59  profilanswer
 

axey a écrit :

Extrait de pure-ftpd :
 

Code :
  1. #ifdef HAVE_POSIX_TERMIOS
  2. # include <termios.h>
  3. #elif defined(HAVE_TERMIO_H)
  4. # include <termio.h>
  5. #elif defined(HAVE_SGTTY_H)
  6. # include <sgtty.h>
  7. #endif
  8. static void disable_echo(void)
  9. {
  10.     if (!isatty(0)) {
  11.         return;
  12.     }
  13. #ifdef ECHO
  14. # ifdef HAVE_POSIX_TERMIOS
  15.     {
  16.         struct termios p;
  17.         if (tcgetattr(0, &p) != 0) {
  18.             return;
  19.         }
  20.         p.c_lflag &= ~ECHO;
  21. #  ifndef TCSAFLUSH
  22. #   define TCSAFLUSH 0
  23. #  endif
  24.         tcsetattr(0, TCSAFLUSH, &p);
  25.     }
  26. # elif defined(HAVE_TERMIO_H) && defined(TCGETA)
  27.     {
  28.         struct termio tty;
  29.         if (ioctl(0, TCGETA, &tty) != 0) {
  30.             return;
  31.         }
  32.         tty.c_lflag &= ~ECHO;
  33.         ioctl(0, TCSETA, &tty);
  34.     }
  35. # else
  36.     {
  37.         struct sgttyb tty;
  38.         if (ioctl(0, TIOCGETP, &tty) != 0) {
  39.             return;
  40.         }
  41.         tty.sg_flags &= ~ECHO;
  42.         ioctl(0, TIOCSETN, &tty);
  43.     }
  44. # endif
  45. #endif


 
 


 
Merci de m'avoir mis sur la piste  :jap: .
 
PS: j'ai mis ca dans OS alternatif, j'ai peur que dans programmation peu de gens connaissent la programmation systeme Unix spour ca :/...mais ici j'ai peur qu'il ne connaissent pas assez la programmation C syteme tout court.
Conclusion : je crois que je vais poster sur les 2 :D

n°415796
Giz
Posté le 23-02-2004 à 11:57:08  profilanswer
 

axey a écrit :

Extrait de pure-ftpd :
 

Code :
  1. #ifdef HAVE_POSIX_TERMIOS
  2. # include <termios.h>
  3. #elif defined(HAVE_TERMIO_H)
  4. # include <termio.h>
  5. #elif defined(HAVE_SGTTY_H)
  6. # include <sgtty.h>
  7. #endif
  8. static void disable_echo(void)
  9. {
  10.     if (!isatty(0)) {
  11.         return;
  12.     }
  13. #ifdef ECHO
  14. # ifdef HAVE_POSIX_TERMIOS
  15.     {
  16.         struct termios p;
  17.         if (tcgetattr(0, &p) != 0) {
  18.             return;
  19.         }
  20.         p.c_lflag &= ~ECHO;
  21. #  ifndef TCSAFLUSH
  22. #   define TCSAFLUSH 0
  23. #  endif
  24.         tcsetattr(0, TCSAFLUSH, &p);
  25.     }
  26. # elif defined(HAVE_TERMIO_H) && defined(TCGETA)
  27.     {
  28.         struct termio tty;
  29.         if (ioctl(0, TCGETA, &tty) != 0) {
  30.             return;
  31.         }
  32.         tty.c_lflag &= ~ECHO;
  33.         ioctl(0, TCSETA, &tty);
  34.     }
  35. # else
  36.     {
  37.         struct sgttyb tty;
  38.         if (ioctl(0, TIOCGETP, &tty) != 0) {
  39.             return;
  40.         }
  41.         tty.sg_flags &= ~ECHO;
  42.         ioctl(0, TIOCSETN, &tty);
  43.     }
  44. # endif
  45. #endif


 
 


 
merci, cela m'a mis sur la voie  :jap:  
 
ma solution pour le masquage de l'echo :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <fcntl.h>
  7. #include <termios.h>
  8. #define BUF_SIZE 100
  9. int main()
  10. {
  11. int fd;
  12. char buf[BUF_SIZE] = {0};
  13. struct termios pass;
  14. /*
  15.  * ouverture du fichier device type caractere
  16.  * il s'agit du terminal d'entree/sortie
  17.  * on le reconnait par la commande shell "tty"
  18.  *
  19.  */
  20. if ((fd = open ("/dev/pts/1", O_RDONLY, 0777)) == -1)
  21. {
  22.  perror ("open" );
  23.  _exit (EXIT_FAILURE);
  24. }
  25. /* recuperation de la configuration courante du terminal */
  26. if (tcgetattr (fd, &pass) == -1)
  27. {
  28.  perror ("tcgetattr" );
  29.  _exit (EXIT_FAILURE);
  30. }
  31. /* suppression de l'echo a la configuration courante */
  32. pass.c_lflag = (pass.c_lflag) & (~ECHO);
  33. /* invite de saisie */
  34. printf ("mot de passe :\n" );
  35. /* modification de la configuration du terminal avec mise a jour instantanee */
  36. if (tcsetattr (fd, TCSANOW, &pass) == -1)
  37. {
  38.  perror ("tcsetattr" );
  39.  _exit (EXIT_FAILURE);
  40. }
  41. /* saisie du mot de passe */
  42. fgets (buf, BUF_SIZE, stdin);
  43. /* retablissement des parametres du terminal */
  44. pass.c_lflag = (pass.c_lflag) | (ECHO);
  45. if (tcsetattr (fd, TCSANOW, &pass) == -1)
  46. {
  47.  perror ("tcsetattr" );
  48.  _exit (EXIT_FAILURE);
  49. }
  50. /* mot de passe saisi */
  51. printf ("vous avez saisi : %s", buf);
  52. return 0;
  53. }


 
mais bon, pour toper ce qu'ecrit l'utilisateur sur une console (programme lance en arriere plan), c'est autre chose  :whistle:  
du fait que les 2 progs (celui en arriere plan et celui de l'utilisateur) sont independants :/
une idée la dessus  ? :??:


Message édité par Giz le 23-02-2004 à 11:59:25
mood
Publicité
Posté le 23-02-2004 à 11:57:08  profilanswer
 

n°778147
loupin
Posté le 02-02-2006 à 14:42:21  profilanswer
 

Salut,  
je decouvre le message et je vois que tu na pa ecouter les cours. Je vois bien de quoi tu parle comme une fonction script a recoder par exemple !!!!!!!!!!!!!
Passons, sinon ta pa trop ecouter les cours toi. T aurais du savoir que pour eviter les echo a l ecran, ce n est pa du tout avec dup, ca n a rien avoir !!!!
Dup sert seulement pour modifier les files descriptor. (cf Cours C/Unix 4 Les termcaps ) Regarde bien ioctl et tu va trouver. En plus, je soupsonne que tu l ai deja fait dans un autre projet auparavant. Et si t avais ete au cour, tu saurais qu il faut jouer avec les tty et les pty ... et forkpty et openpty ... Pfff je t ai pratiquement tout filer, tu recode le tout et voila.
@+

n°778180
leto
Posté le 02-02-2006 à 16:04:43  profilanswer
 

Le message date d'il y'a 2 ans, je suis sur que ton aide lui est très précieuse là :D

n°779007
Je@nb
Kindly give dime
Posté le 05-02-2006 à 15:51:06  profilanswer
 

mdr excellent :d

n°779010
_kal_
Posté le 05-02-2006 à 16:01:47  profilanswer
 

loupin a écrit :

Salut,  
je decouvre le message et je vois que tu na pa ecouter les cours. Je vois bien de quoi tu parle comme une fonction script a recoder par exemple !!!!!!!!!!!!!
Passons, sinon ta pa trop ecouter les cours toi. T aurais du savoir que pour eviter les echo a l ecran, ce n est pa du tout avec dup, ca n a rien avoir !!!!
Dup sert seulement pour modifier les files descriptor. (cf Cours C/Unix 4 Les termcaps ) Regarde bien ioctl et tu va trouver. En plus, je soupsonne que tu l ai deja fait dans un autre projet auparavant. Et si t avais ete au cour, tu saurais qu il faut jouer avec les tty et les pty ... et forkpty et openpty ... Pfff je t ai pratiquement tout filer, tu recode le tout et voila.
@+


 
Elu boulet du jour  :love:


Aller à :
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [C] supprimer les echos de caracteres sur Unix

 

Sujets relatifs
Emulateur cisco IOS pour unix??Instalation logiciel sous Unix/Linux
supprimer liloun souci sous linux ou unix
supprimer une ligne dans un fichier texte en bash [résolu][Windows Services for Unix] Ca sert a quoi ?
[unix] installer une librairie sans etre root c'est possible?[MP3] logiciel pour supprimer les silences de début et de fin
comment supprimer linux ?Pb apache & debian & caractères speciaux
Plus de sujets relatifs à : [C] supprimer les echos de caracteres sur Unix


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR