getch não-bloqueio (), ncurses
Pergunta
Eu estou tendo alguns problemas para obter getch ncurses () para bloco. operação padrão parece ser não-bloqueio (ou eu perdi alguma inicialização)? Eu gostaria que ele funcione como getch () no Windows. Tentei várias versões
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...
(não todos ao mesmo tempo). Eu preferiria não (explicitamente) usar qualquer WINDOW
, se possível. Um loop while
torno getch (), a verificação de um valor de retorno específico é OK também.
Solução
A biblioteca maldições é um pacote. Você não pode simplesmente retirar uma rotina e esperança para o melhor sem inicializar corretamente a biblioteca. Aqui está um código que corretamente blocos em getch()
:
#include <curses.h>
int main(void) {
initscr();
timeout(-1);
int c = getch();
endwin();
printf ("%d %c\n", c, c);
return 0;
}
Outras dicas
A partir uma página homem (grifo nosso):
As rotinas
timeout
ewtimeout
definir o bloqueio ou sem bloqueio ler para uma determinada janela. Sedelay
é negativo, leitura de bloqueio é usada (ou seja, aguarda indefinidamente para entrada).
Você precisa chamar initscr()
ou newterm()
para maldições inicializar antes que ele vai trabalhar. Esta multa funciona para mim:
#include <ncurses.h>
int main() {
WINDOW *w;
char c;
w = initscr();
timeout(3000);
c = getch();
endwin();
printf("received %c (%d)\n", c, (int) c);
}