Bonjour à tous les codeurs fous (et les autres).
Voilà une petite question à laquelle je ne trouve aucune solution simple et non bourrin :
comment vider le tampon de l'entrée standard ?
fflush() n'est effectif que pour les sorties (hasardeux et donc non portable concernant stdin);
faire appel a un getchar() entraîne une attente et donc une action utilisateur lorsque le dit tampon est vide;
fropen(/dev/tty,r,stdin) est tout bonnement bien trop bourrin... si cette procédure aboutit à l'écrasement des données subsistantes dans le tampon on devrait bien pouvoir faire appel aux quelques fonctions qui nous intéressent appelées par freopen.
Merci d'avance pour vos lumières.
# Idée
Posté par Ph Husson (site web personnel) . Évalué à 4.
Et tu recois des qu'il vide ceux de sortie.
Si tu basse par une console (virtuelle ou non, en pty ou tty enfin des console quoi!), il faut faire deux ioctl (je te passe le code si c'est bien ce que tu veux) pour dire à (l'émulation de) terminal d'envoyer non pas au retour à la ligne, mais à chaque frappe (mode canon si j'ai bonne mémoiré).
Bon allez pas envie d'attendre la reponse voila le code:
fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK);
char car[2];
struct termios term1,term2;
ioctl(STDIN_FILENO, TCGETS, (unsigned long*)&term1);
ioctl(STDIN_FILENO, TCGETS, (unsigned long*)&term2);
if(!(term1.c_lflag=~ICANON))
term1.c_lflag=term1.c_lflag|ICANON;
ioctl(STDIN_FILENO, TCSETS, (unsigned long*)&term1);
// sleep(1);
car[0]='\0';
int i=0;
while(read(STDIN_FILENO, car, 1)==1) {
car[1]=0;
if(car[0]==key) {
i++;
}
}
ioctl(STDIN_FILENO, TCSETS, (unsigned long*)&term2);
return i;
Donc en vrac ca enregistre le "type" actuel, si c'est pas en ICANON il l'active et refait le ioctl pour l'appliquer, teste si un des caractère taper est key (un char pas char*)
Incremente i si c'est le cas
à la fin reprend les réglages pré appel
et retourne le nb de fois que la touche 'key' a ete trouvé
(code complet dispo ici:http://svn.fnux.org/softwares/unstable/init/keys.c(...) user:anonymous pass vide)
[^] # Re: Idée
Posté par soda . Évalué à 1.
De tous les forums que j'ai parcouru aujourd'hui aucun n'a apporté une solution aussi claire et précise.
merci merci :o)
[^] # Re: Idée
Posté par Ph Husson (site web personnel) . Évalué à 1.
Oula je deviens gateux moi ;o)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.