[C]une commande pour linux qui serait equivalente a kbhit ??

une commande pour linux qui serait equivalente a kbhit ?? [C] - Programmation

Marsh Posté le 23-02-2002 à 10:20:49    

y a t il un equivalent de kbhit qui marcherait sous linux ??

Reply

Marsh Posté le 23-02-2002 à 10:20:49   

Reply

Marsh Posté le 23-02-2002 à 12:06:10    

Si tu nous disais ce que ça fait, on pourrait peut-être t'aider.

Reply

Marsh Posté le 23-02-2002 à 13:11:45    

mmmmm c vrai:)
 
kbhit, ca permet, de savoir si une touche a été pressée, et si oui de reccuperer le nom de la touche pressée.
 
mais si aucune touche n a été pressée, ca ne fait pas "attendre" le prog, comme le ferait getchar()

Reply

Marsh Posté le 23-02-2002 à 14:11:08    

Salut, alors je connais pas Linux mais il y a un équivalent un peu plus bourin mais qui marche :
au lieu de while(!kbhit()) tu fais un thread :
main()
{
  stop = 0;
  lancer_lethread() (je connais pas la fonction linux)
  getch();
}
 
void monthread(void*)
{
  while(stop==0)
  {
    ton prog....
  }
}
 
et voila !

Reply

Marsh Posté le 23-02-2002 à 14:53:12    

Il y a plein de moyens.
Déjà, tu peux passer stdin en mode non-bloquant, avec un truc du genre fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); comme ça, les appels à getchar renvoient EAGAIN s'il n'y a pas de données.
 
Sinon, tu peux utiliser ncurses, et là il y a plein de moyens. Cf. man ncurses et man halfdelay.

Reply

Marsh Posté le 23-02-2002 à 14:58:58    

j ai un doute, mais les thread, c est du C ou C++ ?? (je ne peux utiliser que du C ...)
 
je vais me renseinger, sur fnctl(), ca me parait etre ce dont j ai besoin

Reply

Marsh Posté le 23-02-2002 à 15:33:58    

je viens de jeter un coup d oeil a la fonction :d et je crois qeu je vais plutot me pencher sur les thread:d
(je sais pas pkoi, mais la doc Gnu a tedance a rebuter un peu:) )

Reply

Marsh Posté le 23-02-2002 à 16:16:04    

???
man fcntl est très clair, pourtant. Et ce n'est pas du GNU, car c'est un appel système linux.
 
Sinon, pour les threads ce sera effectivement de la doc GNU, et elle est bigrement bien foutue. Je te conseille de prendre la version postscript (dans debian c'est le paquet glibc-doc), et/ou de jeter un coup d'oeil du côté de man pthread_create.
 
Au passage, j'utilise les deux (lecture non bloquante avec ncurses et threads Posix), c'est encore la meilleure solution.

Reply

Marsh Posté le 23-02-2002 à 16:47:48    

bon, je suis en train de tester les thread et aussi la fonctio fncl.
 
mais la j ai un pb, qu a pas grand chose a voir avec les threads, mais plutot avec l utilisation d un lib :
 quand je veux utiliser des threads, (avec pthread.h)
je compile avec gcc -> undefined reference to "pthread_create"  
 
je dois surment linker la lib, mais je sias pas quel ligne rajouter a mon makefile ou bien quelle paramettre pour gcc :??:

Reply

Marsh Posté le 23-02-2002 à 17:25:02    

cc -Wall toto.c -lpthread -o kbdtest


---------------
Mes News
Reply

Marsh Posté le 23-02-2002 à 17:25:02   

Reply

Marsh Posté le 23-02-2002 à 17:28:20    

tu a essayé" avec getch(e)() de la librairie conio.h ?
le "e" entre guillement permet d avoir en valeure de retour le caractere frappé je crois
en gros
 
char a;
a=getche();//essaye sans le e si ca marche pas

Reply

Marsh Posté le 23-02-2002 à 17:35:20    

mmm
pour l instant, tout a l air de bien marchr :) (je croise les doigts:) )
le -lpthread, je suis con j aurais du y penser, c est les meme option que dev c++ :)
 
le descripteur de stdin non blockant, ca l air aussi de bien marcher (mis a a part que gcc ne connait pas STDIN_FILENO == 0 ?! enfin c pas grave ca)
 
en ce qui concerne conio.h, ca ne marche que sous windows je crois

Reply

Marsh Posté le 23-02-2002 à 18:00:07    

j ai pas du croiser les doigt assez fort, car le prog a du mal a faire ce que je desire :
 
#include<fcntl.h>
 
int main(void)
{
  char c = -1 ;
   
fcntl(0,T_SETFL,0_NONBLOCK); // ca doit mettre le descripteur de stdin en mode nonblockant ??
  while(1)
  {
    c = getchar() ;
    if(c != -1 )
    {
      c++ ;
      printf( "... %c" , c );
      c = -1 ;
    }
  }
}
 
j aimerais que quand j appuis sur A, il m affiche B ( snas que j ai a appuyer sur entrer)
 
mais en pratique : ca m affiche A (apres la pression de la touche A), puis quant j appuis ensuite sur entrer, ca m affiche B

 

[jfdsdjhfuetppo]--Message édité par slvn--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 23-02-2002 à 18:57:19    

Si tu veux une gestion de l'entrée plus fine que ça, je pense qu'il faut vraiment utiliser ncurses. On peut désactiver l'écho local, et avoir les caractères instantanément. Entre les deux, tu as readline, mais ses fonctionnalités sont restreintes à certains trucs.
 
En plus, ta boucle est buggée : elle va bouffer 100 % de cpu.

Reply

Marsh Posté le 23-02-2002 à 19:32:18    

ca l air pas mal le ncurses.h, je viens de tomber sur un site sympa qui donne une bonne approche globale  
( http://perso.club-internet.fr/arif [...] es03.html)
 
mais, est ce que je suis obligé de cree un objet "windows" dnas le terminal pour pouvoir faire une saisie de caractere "non blocquant" ??
 
et pour ma boucle, pour arranger le pb, la meilleurs solution est de faire un thread ??

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed