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.

¿Fue útil?

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 y wtimeout set bloqueo o no bloqueo de lectura por   una ventana determinada. Si delay 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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top