getch no bloqueante (), ncurses
Pregunta
Estoy teniendo algunos problemas para conseguir getch ncurses' () para bloquear. funcionamiento por defecto parece ser no bloqueante (o me he perdido algo de inicialización)? Me gustaría que funcione como getch () en Windows. He probado varias versiones de
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...
(no todos al mismo tiempo). Yo preferiría no (explícitamente) utilizar cualquier WINDOW
, si es posible. Un bucle alrededor while
getch (), la comprobación de un valor de retorno específica está bien también.
Solución
La biblioteca maldiciones es un paquete. No se puede simplemente sacar una rutina y esperar lo mejor sin inicializar correctamente la biblioteca. Aquí hay un código que correctamente bloques en getch()
:
#include <curses.h>
int main(void) {
initscr();
timeout(-1);
int c = getch();
endwin();
printf ("%d %c\n", c, c);
return 0;
}
Otros consejos
una página de manual (énfasis añadido):
Las rutinas
timeout
ywtimeout
set bloqueo o no bloqueo de lectura por una ventana determinada. Sidelay
es negativo, se utiliza el bloqueo de lectura (es decir, espera indefinidamente para la entrada).
Es necesario llamar initscr()
o newterm()
para inicializar maldiciones antes de que funcione. Esto funciona muy bien para mí:
#include <ncurses.h>
int main() {
WINDOW *w;
char c;
w = initscr();
timeout(3000);
c = getch();
endwin();
printf("received %c (%d)\n", c, (int) c);
}