En fait c'est pas toi qui gère les buffer d'entrée mais "l'autre coté" (ici un shell non?) qui gère les buffers de sortie,
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:
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)
# Idée
Posté par Ph Husson (site web personnel) . En réponse au message vider le tampon stdin. É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)