Detection clavier en C ANSI

Fermé
Utilisateur anonyme - 24 avril 2002 à 17:34
 Utilisateur anonyme - 29 avril 2002 à 09:10
Salut les gars...
je recherche la fonction qui serait l'équivalent de "_kbhit" de la librairie conio.h
en effet, cette librairie n'existe pas sous linux.
mon but:
detecter qd l'utilisateur appuie sur une touche du clavier, pour sortir d'une boucle...
la fonction "getchar" ne convient pas car elle necessite l'appui sur "entree"...
je veux en gros lancer ma boucle, partir boire un cafe, et revenir un jour ou l'autre et arreter le prog en apuyant sur une touche...
mon pb est que toutes les fonctions d'I/O que g trouvées pour l'instant sont "bloquantes"
si kunkun a une piste, merci d'avance :)

.O
(_)__... Castor
A voir également:

4 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
24 avril 2002 à 17:51
Il faut peut-être voir du côté de

man 3 termios


Allways close to Open Source...
Johan Daine
0
Utilisateur anonyme
24 avril 2002 à 17:56
il me semblait que termios se rapportat au communications vers des ports specifiques...
mais je vais y jeter un coup d'oeil, merci jisisv
.O
(_)__... Castor
0
Utilisateur anonyme
25 avril 2002 à 09:29
NOM
termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain,
tcflush, tcflow, cfmakeraw, cfgetospeed, cfgetispeed,
cfsetispeed, cfsetospeed, tcgetpgrp, tcsetpgrp - Consulter
ou indiquer les attributs de terminaux, le contrôle de
ligne, la vitesse de transmission et le GID du processus
en avant-plan sur un terminal.

c bien ce que je pensais, c par rapport au terminal... mais bon je copntinue l'exploration qd mm ds ce man...

.O
(_)__... Castor
0
Utilisateur anonyme
25 avril 2002 à 09:31
DESCRIPTION
Les fonctions termios établissent une interface générale
sous forme de terminal, permettant de contrôler les ports
de communication asynchrone.

c bien ca... juste les ports com.....
mais ct une bonne idee, merci jisisv

.O
(_)__... Castor
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
25 avril 2002 à 10:34
Voici un code extrait des sources du livre "Beginning Linux Programming" de Neil Matthews chez Wrox
(voi le chargement sur http://www.wrox.com )
#include <stdio.h>
#include <termios.h>
#include <term.h>
#include <curses.h>
#include <unistd.h>

static struct termios initial_settings, new_settings;
static int peek_character = -1;

void init_keyboard();
void close_keyboard();
int kbhit();
int readch();

int main()
{
int ch = 0;

init_keyboard();
while(ch != 'q') {
printf("looping\n");
sleep(1);
if(kbhit()) {
ch = readch();
printf("you hit %c\n",ch);
}
}
close_keyboard();
exit(0);
}
void init_keyboard()
{
tcgetattr(0,&initial_settings);
new_settings = initial_settings;
new_settings.c_lflag &= ~ICANON;
new_settings.c_lflag &= ~ECHO;
new_settings.c_lflag &= ~ISIG;
new_settings.c_cc[VMIN] = 1;
new_settings.c_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &new_settings);
}

void close_keyboard()
{
tcsetattr(0, TCSANOW, &initial_settings);
}

int kbhit()
{
char ch;
int nread;

if(peek_character != -1)
return 1;
new_settings.c_cc[VMIN]=0;
tcsetattr(0, TCSANOW, &new_settings);
nread = read(0,&ch,1);
new_settings.c_cc[VMIN]=1;
tcsetattr(0, TCSANOW, &new_settings);

if(nread == 1) {
peek_character = ch;
return 1;
}
return 0;
}

int readch()
{
char ch;

if(peek_character != -1) {
ch = peek_character;
peek_character = -1;
return ch;
}
read(0,&ch,1);
return ch;
}

Allways close to Open Source...
Johan Daine
0
Utilisateur anonyme
29 avril 2002 à 09:04
Je viens de voir que ma reponse n'est aps apparue dans le forum...
je disais donc: "merci jisiv, ca marche nikel t le meileur" :-D

.O
(_)__... Castor
0
grosquik_ Messages postés 33 Date d'inscription jeudi 18 avril 2002 Statut Membre Dernière intervention 26 avril 2002
25 avril 2002 à 12:48
essaye keypress()
il devrait de retourner 1 dés qu'une touche est dans le beffer du clavier
(tu le relis avec getch() )
0
Utilisateur anonyme
29 avril 2002 à 09:10
salut grosquik
merci du tuyau, mais g pas trouve la lib qui contient "keypress", et un "man keypress" m'envoie balader ;)
tu as la lib a inclure stp?

.O
(_)__... Castor
0