IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Termcap et entrées clavier


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Par défaut Termcap et entrées clavier
    Bonjour a tous, pour mes cours, je dois coder un shell.

    Pour gérer les entrées clavier, j'utilise la bibliothèque termcap. (consigne demandée dans le sujet).

    Je pensais que ma fonction qui récupère les caractères entres était bonne, mais visiblement pas a 100%.

    Voici ma petite fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int							check_key(int func(char key[BUFF_SIZE_READ + 1]))
    {
    	char					buff[BUFF_SIZE_READ + 1];
     
    	bzero(buff, sizeof(buff));
    	if (read(STDIN_FILENO, buff, BUFF_SIZE_READ) <= 0)
    		return (-1);
    	return (func(buff));
    }
    Mon problème est simple. Cette fonction marche pour l'ensemble des touches du clavier sauf 'maj + k'

    Ce que je ne comprends pas, c'est que ma fonction ne retourne même pas -1. Le bzero est bien éxécuté, le read aussi et ça s'arrète PK?? lol!

    Avez-vous une idée de pourquoi ça fait ça?

    PS: BUFF_SIZE_READ = 5

    Merci Bonne journee

    EDIT:

    j'ai changé les réglages de mon terminal et ça fonction

    Voici mes réglages

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    term.c_lflag &= ~(ICANON | ECHO | ISIG);
    Sans ISIG ça ne fonctionne pas

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 461
    Par défaut
    Bonjour,

    Si c'est une seule combinaison de touches en particulier, c'est parce qu'elle est rattrapée par un autre sous-système qui s'en sert à son propre compte. Autrement dit, c'est déjà le raccourci clavier de quelque chose. Cela dit, « Maj + k », c'est assez singulier, étant donné que c'est simplement censé produire « K ». Ne s'agirait-il pas de « Ctrl + k » ?

    Si ça fonctionne en effaçant ISIG, c'est parce ce faisant, les envois de signaux au processus depuis le clavier sont désactivés et que donc, effectivement, la combinaison de touches doit être associée à une commande spéciale du terminal ou de sa discipline de ligne (telles que Susp avez Ctrl+Z, Intr avec Ctrl+C, ou Quit avec Ctrl+\). Ou alors, tu as toi-même réglé tous ces flags avec termios et que tu as écrasé par inadvertance le tableau des caractères spéciaux.

    Que donne un « stty -a » exécuté dans ton terminal et dans les mêmes conditions que ton Shell ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 36
    Par défaut
    Bonjour Obsidian,

    Si c'est une seule combinaison de touches en particulier, c'est parce qu'elle est rattrapée par un autre sous-système qui s'en sert à son propre compte. Autrement dit, c'est déjà le raccourci clavier de quelque chose. Cela dit, « Maj + k », c'est assez singulier, étant donné que c'est simplement censé produire « K ». Ne s'agirait-il pas de « Ctrl + k » ?
    C'est bien maj + k donc oui 'K' la touche ctrl me donne bien une autre valeur.

    Je t'ai fait un screen du résultat de stty -a dans mon shell (promt en vert) et dans mon terminal (promt) bleu
    A première vu, lflag a des diff, il y a des '-' en plus dans mon shell.

    Nom : Capture d’écran 2016-06-25 à 09.15.57.png
Affichages : 463
Taille : 242,8 Ko

    Chez moi cmd + k fait un clear des 2 shells
    ctrl + k ne fair rien

    Merci pour ta rep

    PS : les infos au debut de mon shell sont mon header lol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SWING] gérer les entrées clavier à un seul endroit
    Par Isher dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 19/07/2006, 10h55
  2. Comment annuler une entrée clavier?
    Par doudine dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 17/02/2006, 11h22
  3. [Débutant] console , entrée clavier
    Par maminova dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 18/10/2005, 10h49
  4. [Entrée standard] Prendre les entrées clavier.
    Par Katyucha dans le forum Langage
    Réponses: 4
    Dernier message: 19/09/2005, 12h22
  5. Réponses: 3
    Dernier message: 04/02/2004, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo