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

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°103864
slvn
Posté le 23-02-2002 à 10:20:49  profilanswer
 

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

mood
Publicité
Posté le 23-02-2002 à 10:20:49  profilanswer
 

n°103879
Jar Jar
Intaigriste
Posté le 23-02-2002 à 12:06:10  profilanswer
 

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

n°103905
slvn
Posté le 23-02-2002 à 13:11:45  profilanswer
 

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()

n°103938
antsite
Je me souviens
Posté le 23-02-2002 à 14:11:08  profilanswer
 

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 !

n°103959
Jar Jar
Intaigriste
Posté le 23-02-2002 à 14:53:12  profilanswer
 

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.

n°103962
slvn
Posté le 23-02-2002 à 14:58:58  profilanswer
 

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

n°103974
slvn
Posté le 23-02-2002 à 15:33:58  profilanswer
 

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:) )

n°103986
Jar Jar
Intaigriste
Posté le 23-02-2002 à 16:16:04  profilanswer
 

???
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.

n°104002
slvn
Posté le 23-02-2002 à 16:47:48  profilanswer
 

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 :??:

n°104016
R@NNIS
Tout est possible ou presque.
Posté le 23-02-2002 à 17:25:02  profilanswer
 

cc -Wall toto.c -lpthread -o kbdtest


---------------
Mes News
mood
Publicité
Posté le 23-02-2002 à 17:25:02  profilanswer
 

n°104019
veryfree
Posté le 23-02-2002 à 17:28:20  profilanswer
 

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

n°104025
slvn
Posté le 23-02-2002 à 17:35:20  profilanswer
 

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

n°104031
slvn
Posté le 23-02-2002 à 18:00:07  profilanswer
 

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]

n°104042
Jar Jar
Intaigriste
Posté le 23-02-2002 à 18:57:19  profilanswer
 

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.

n°104049
slvn
Posté le 23-02-2002 à 19:32:18  profilanswer
 

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 ??


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

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

 

Sujets relatifs
[COMMANDE SOUS UNIX]Please aidez moi !!!ODBC sous Linux
[ASM ou C] Comment lire sur un port du bios sur linux ?[php]lancer une commande système??
[C] compiler un code source linux pour windows !Programmation Fortran sous Linux (g77)
[linux] lucherquestion sur une commande html
commande html pour donner l'heure ???[PHP] Activer la fonction mail sous linux
Plus de sujets relatifs à : [C]une commande pour linux qui serait equivalente a kbhit ??


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