J'ai un serveur TCP très simple écrit en C. Il s'exécute indéfiniment, en attente de connexions. Sous Windows, j'utiliser select
pour vérifier l'activité sur la prise, et s'il n'y en a pas, je le code suivant pour me permettre d'arrêter de fumer en appuyant sur « q » sur le clavier:Comment puis-je capturer des frappes uniques dans une application console Unix sans bloquer?
if(kbhit()) {
char c = getch();
if(c == 'q') break;
}
Ce doesn ne fonctionne pas sur unix, car kbhit
n'existe pas et getch
fonctionne différemment. J'ai trouvé sample code qui utilise tcsetattr
pour modifier les paramètres du terminal et permettre l'entrée caractère par caractère. Après avoir appelé la fonction init, j'ouvre/dev/stdin (avec O_NONBLOCK
) et lit un caractère, mais read(f, &c, 1)
jusqu'à ce qu'un personnage soit frappé.
Je suppose que je pourrais générer un thread séparé et attendre attendre indéfiniment, puis signaler le premier thread si l'utilisateur frappe 'q', mais cela semble un peu lourd. Sûrement il y a un moyen plus facile?
Même si mon application n'utilise pas déjà select, cela fonctionnera. Le fait que j'utilise déjà select le rend très facile, et ça fonctionne comme un charme. Merci –