Non-bloquant getch(), ncurses
j'ai de la difficulté à faire bloquer le getch() de ncurses. L'opération par défaut ne semble pas bloquer (ou Ai-je manqué une certaine initialisation)? Je voudrais travailler comme getch() dans Windows. J'ai essayé différentes versions de
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...
(pas tous en même temps). Je préfère ne pas (explicitement) d'utiliser tout WINDOW
, si possible. while
boucle autour de getch (), vérifier une valeur de retour spécifique est OK aussi.
3 réponses
La bibliothèque curses est un package deal. Vous ne pouvez pas simplement sortir une routine et espérer le meilleur sans initialiser correctement la bibliothèque. Voici un code qui bloque correctement getch()
:
#include <curses.h>
int main(void) {
initscr();
timeout(-1);
int c = getch();
endwin();
printf ("%d %c\n", c, c);
return 0;
}
Vous devez appeler initscr()
ou newterm()
pour initialiser les malédictions avant qu'il fonctionne. Cela fonctionne bien pour moi:
#include <ncurses.h>
int main() {
WINDOW *w;
char c;
w = initscr();
timeout(3000);
c = getch();
endwin();
printf("received %c (%d)\n", c, (int) c);
}
une page de manuel de (italiques ajoutés):
timeout
etwtimeout
routines définir le blocage ou le non-blocage lire pour une fenêtre donnée. Sidelay
est négatif, la lecture de blocage est utilisée (i.e., attend indéfiniment d'entrée).