Detection clavier en C ANSI
Fermé
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
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:
- Detection clavier en C ANSI
- Changer clavier qwerty en azerty - Guide
- Comment taper / sur clavier - Guide
- Telecharger clavier arabe تنزيل لوحة المفاتيح العربية - Télécharger - Divers Web & Internet
- Clavier de l'ordinateur - Guide
- Télécharger clavier arabe samsung - Télécharger - Bureautique
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
24 avril 2002 à 17:51
Il faut peut-être voir du côté de
man 3 termios
Allways close to Open Source...
Johan Daine
man 3 termios
Allways close to Open Source...
Johan Daine
Utilisateur anonyme
25 avril 2002 à 09:29
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
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
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
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
(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
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
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() )
il devrait de retourner 1 dés qu'une touche est dans le beffer du clavier
(tu le relis avec getch() )
24 avril 2002 à 17:56
mais je vais y jeter un coup d'oeil, merci jisisv
.O
(_)__... Castor