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

  FORUM HardWare.fr
  Programmation
  C

  Lecture du clavier : ioctl

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lecture du clavier : ioctl

n°1321078
azubal
Posté le 08-03-2006 à 16:34:47  profilanswer
 

Bonjour,
 
quand on utilise la fonction read avec le fd 0 (le clavier), la fonctio bufferise et bloque tant qu'on n'a pas appuye sur 'enter'.
en trippotant la line discipline, on peut dire a la fonction de renvoyer chaque touche du clavier (autant un caractere, qu'une touche special).

Code :
  1. ioctl(fd, TIOCGETA, &t);
  2.   t.c_lflag &= ~ICANON;                                                 
  3.   t.c_cc[VMIN] = 4;
  4.   t.c_cc[VTIME] = 1;
  5.   ioctl(fd, TIOCSETA, &t);


ca marche tres bien. j'arrive a recuperer toutes les touches.
seulement si je tape vite une serie de caractere, ou si je reste appuyer sur une touche (repetition). ca rammmeeeuhhhh :(
 
j'en conclu donc que ma methode est degueulasse et qu'il existe une methode plus propre et surtout plus performante.
 
 
mais je vois pas  :pt1cable:  
 
Help  :hello:

mood
Publicité
Posté le 08-03-2006 à 16:34:47  profilanswer
 

n°1321083
franceso
Posté le 08-03-2006 à 16:47:52  profilanswer
 

Tu peux peut-être essayer avec tcgetattr() / tcsetattr(), mais je suppose que ça fera la même chose...

n°1321189
azubal
Posté le 08-03-2006 à 17:41:32  profilanswer
 
n°1321539
franceso
Posté le 09-03-2006 à 08:58:55  profilanswer
 


tcsetattr ne marche pas du tout, ou il n'améliore pas ta solution ?

n°1323044
nargy
Posté le 10-03-2006 à 19:24:07  profilanswer
 

Sous linux:
man 1 kbd_mode
...après faudrait voir le code de kbd_mode...
 
Sinon j ai ce morceau de code qui utilise termios:
 

Code :
  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <sys/ioctl.h>
  4. #include <termios.h>
  5. void init_keyboard()
  6. {
  7.   struct termios termios_p;
  8.   int fd=fileno(stdin);
  9.   tcgetattr(fd, &termios_p0);
  10.   tcgetattr(fd, &termios_p);
  11.   cfmakeraw(&termios_p);
  12.   cfsetispeed (&termios_p, 1);
  13.   tcsetattr (fd, TCSANOW, &termios_p);
  14.   term_attrs=fcntl(fd,F_GETFL);
  15.   fcntl(fd,F_SETFL,term_attrs|O_NONBLOCK);
  16. }
  17. void close_keyboard()
  18. {
  19.   int fd=fileno(stdin);
  20.   fcntl(fd,F_SETFL,term_attrs);
  21.   tcsetattr (fd, TCSANOW, &termios_p0);
  22. }


 

n°1323045
nargy
Posté le 10-03-2006 à 19:25:23  profilanswer
 

ya ça aussi, à déclarer en global:
 

Code :
  1. struct termios termios_p0;
  2. int term_attrs;


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Lecture du clavier : ioctl

 

Sujets relatifs
ignorer d'un fichier txt lors de la lectureProgrammation Macro touches de clavier
[Resolu] Excel acceder en lecture ou modificationLecture du nombre de caracteres d'un float
lecture automatique d'un SWF au chargement d'une page HTMLprobleme lecture audio sur forum
[BATCH] Saisie clavier sur une nouvelle ligneJ2ME-Besoin d'aide pour lecture video et enregistrement audio
lecture de fichier avec sscanfremplir des saisies clavier automatiquement ?
Plus de sujets relatifs à : Lecture du clavier : ioctl


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