Désactiver l'ECHO clavier

Résolu/Fermé
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 - 6 sept. 2014 à 00:18
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 - 5 oct. 2014 à 23:08
Bonjour,
Je travaille en ce moment sur les liaisons séries avec des programme en C .
J'ai un petit souci : je suis bloqué à un endroit où je suis sensé mettre une option qui permet pour le clavier uniquement de désactiver l'écho.
C'est à dire : mon pc est relié a un autre pc avec une liaison RS232C, le but est de communiquer, quand je tape dans mon terminal "hello" le mot s'affiche sur le deuxième pc ainsi que sur le mien. Cependant, la consigne de cette dernière question est que lorsque je tape dans mon terminal "hello", le mot s'affiche sur le deuxième pc mais pas sur le mien.
J'ai pensé utiliser un VTIME à la place de l'ECHO mais je ne sais pas si il faut que je le déclare et comment faire.
Quelqu'un pourrait-il m'aider ?

Je vous met mon code ci dessous :

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <termios.h>

void init_clavier( struct termios *new, struct termios *old)
{
tcgetattr(STDIN_FILENO, old ) ;
memcpy(new, old, sizeof(struct termios) ) ;

new->c_lflag |= ICANON ; //Canonique
new->c_lflag |= ECHO ; //echo


tcsetattr(STDIN_FILENO, TCSANOW, new) ;
}


void restore_clavier(struct termios *old)
{
puts("restore rs");
tcsetattr(STDIN_FILENO, TCSANOW, old ) ;
system("stty -a");
}
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 6/09/2014 à 12:42
Bonjour,

Rien de portable.
Mais sur *nix, tu peux passer le terminal en mode raw.
Par exemple :
#include <termios.h> 
#include <unistd.h> 
  
void modeRaw(const int flag) 
{ 
    static struct termios cooked; 
    static int rawActif; 
  
    if (rawActif == flag) 
        return; 
  
    if (flag) 
    { 
        struct termios raw; 
  
        tcgetattr(STDIN_FILENO, &cooked); 
  
        raw = cooked; 
        cfmakeraw(&raw); 
        tcsetattr(STDIN_FILENO, TCSANOW, &raw); 
    } 
    else 
        tcsetattr(STDIN_FILENO, TCSANOW, &cooked); 
  
    rawActif = flag; 
}

N'oublie pas de repasser le terminal en mode cooked avant de quitter le programme, sinon tu auras des surprises lors de saisies sur le terminal :-).
Merci pour les prochaines fois d'utiliser les balises "code c" lorsque tu postes un code. Exemple :
<"code c">
/*Ici tu mets ton code*/
<"/code">
(A mettre ans les guillemets)
Cdlt

Google is your friend
1
siamens_duj Messages postés 191 Date d'inscription vendredi 20 juin 2014 Statut Membre Dernière intervention 14 février 2019 7
5 oct. 2014 à 23:08
Merci beaucoup !
0