équivalent de conio.h pour kbhit() sous linux ?

Signaler
Messages postés
4
Date d'inscription
samedi 6 décembre 2003
Statut
Membre
Dernière intervention
8 décembre 2003
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
J'ai posé une question un peu plus loin "comment gérer un sleep et une saisie en meme temps". on m'a dit d'utiliser kbhit() de la la librairie conio qui renvoie 1 quand une touche du clavier est pressée . Seulement conio.h n'est pas fourni avec le compilateur c++ de base fournit avec linux!! Or mon projet est a faire sous linux!!

Ma question : "y'a t'il un équivalent de kbhit() dans une des libraires fournies avec linux (mandrake9.1) ?"
Merci d'avance pour vos nombreuses (... j'espères!) réponses !! ;)

4 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
a scuz, j'ai vu ds le precedent poste que t'avai dit que tu etait sous linux et je l'ai zappé

essaye getchar() de la stdio qui je croi fonctionne comme getch() ou getche() mais je suis pas sur
Messages postés
96
Date d'inscription
mardi 2 avril 2002
Statut
Membre
Dernière intervention
7 août 2005

Mais le probleme avec getch / getche et getchar , c que ca va bloké jusqu a ce que un caractere soit tappé !!

capunk , essaye de le faire avec conio.c .... sur Dev-C++ sous windows , ya pas conio.h , mais ya conio.c ...
Messages postés
96
Date d'inscription
mardi 2 avril 2002
Statut
Membre
Dernière intervention
7 août 2005

Scuse j'ai dit une grosse connerie .... Mea Culpa
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
tu peu le faire avec un select
#include <sys/time.h>
#include <sys/types.h>
#include <sys/select.h>

...

fd_set fd;
FD_ZERO(&fd);
FD_SET(0,&fd); // ajout de l'entrée standard
// dans l'ensemble de descripteurs
struct timeval t={2,0}; // timeout de 2 sec
select(20,&fd,NULL,NULL,&t);

en gros le select est interrompu si une touche est appuyé ou au bout de 2 sec, pour savoir si il a ete interropue a cause de l'appuye sur une touche, tu fait:
if(ISSET(0,&fd)) // une touche a ete apuye

cependant je suis pas sur que ca marche